码迷,mamicode.com
首页 > 其他好文 > 详细

Redis对象和Redis数据结构

时间:2020-03-27 10:24:17      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:str   保存   部分   string   编码   简单   uek   table   字符   

Redis第一部分

建议已经有这部分知识的人看 用来查漏补缺
我会迭代更新

Redis对象

首先key value,key是固定的字符串对象,value可以是那5种中的一种,而那5种根据场景的不同,每种都有至少两种编码方式,也就是数据结构

数据结构有linkedlist 双端链表

ziplist压缩列表

  • 这个用的太多了 以至于我有深刻的印象

skiplist

  • 跳跃表 类似于平衡树的作用 但是实现方式太友好了

raw

  • 都是sds simply dynamic string

embstr

  • 都是sds simply dynamic string 区别是这个更短喽 压缩过的 是连续的内存 所以速度比raw的快

hashtable

  • 两个表嘛ht[0]和ht[1]
  • 嗯 冲突就是在同一个哈希值组成链表 然后有一个负载因子 默认好像是1 进行rehash 然后rehasn的话会在另外一个大于当前数量number的最小的2的n次方那么大的扩容 扩容期间 服务器空闲就转移 当然 新插入的都是在这个新表里 hashtable数组ht[1] 然后全部拷到ht[1]后 就会把ht[0]换成ht[1] 然后h[1]又变成空

linledlist

  • 就是一个简单的双链表

intset

  • int_8 int_16 int_32 int_64
  • 会保存编码方式
  • 一旦有东西需要往上提 比如从int_32到int_64了 这个过程是不可逆的 即使把64的都删了 也不会降编码回32了

其他的一些话题

类型检查 命令多态

  • 先看key是不是符合那个命令的

    • 再看看编码方式是什么

对象回收

  • 计数呗

对象共享

  • 不共享包含字符串的对象

  • 对整数检查O(1)

  • 对字符串O(N)

  • 对象包含了多个值对象

    • O(N^2)

空转时长

  • 有个lru时间 记录最后一次被程序访问的时间

字符串

int

  • redis默认有0~9999的int字符串
  • 顺便说一下 整数都是先转字符串 然后用的时候再转回数字

raw

embstr

集合

intset

hashtable

hashtable

ziplist

数据结构叫zset

  • skiplist

    • 子主题 1
  • dict

    • 子主题 1
  • 同时用这两个的原因是因为 既要单点查询的速度 也要范围查询的速度吧

list

linkedlist

ziplist

有序集合

ziplist

  • score key

dict

XMind: ZEN - Trial Version
技术图片

Redis对象和Redis数据结构

标签:str   保存   部分   string   编码   简单   uek   table   字符   

原文地址:https://www.cnblogs.com/yahoo17/p/12579493.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!