Redis数据结构和对象(七)——对象

Redis数据结构和对象(一)
Redis数据结构和对象(二)
Redis数据结构和对象(三)
Redis数据结构和对象(五)
Redis数据结构和对象(六)
Redis数据结构和对象(七)——对象

一,对象。


  • 1,Redis的主要数据结构:简单动态字符串(SDS),双端列表,字典,压缩列表,整数集合,跳跃表等。Redis内包的对象包括以下五种字符串对象,列表对象,哈希对象,集合对象,有序集合对象。这些对象都使用到最少一种的前面介绍的数据结构。
  • 2,Redis的对象系统还实现了基于引用计数技术的内存回收机制。
  • 3,对象的引用计数还带有对象共享作用。Redis在初始化服务器时就会创建一万个字符串对象。包含了0到9999的所有整数值。当服务器会用到这些整数值时,会直接使用这些共享对象。
  • 4,Redis的对象带有访问时间记录信息。采用OBJECT IDLETIME的命令访问对象的lru属性,这个属性记录了对象最后一次被命令程序访问的时间。

二,对象的类型和编码。


  • 1,类型。
    • 对象类型可以采用TYPE命令。
    • 对象的类型:
    • 这里写图片描述
  • 2,编码。
    • 对象的编码类型可以采用OBJECT ENCODING命令。
    • 这里写图片描述

三,字符串对象。


  • 1,字符串对象的编码可以是int,raw或embstr。
    • a) int编码long类型保存的整数。
    • b) embstr编码保存字符串的字符串的长度小于等于39字节。
    • c) raw编码保存字符串长度大于39字节。
  • 2,embstr编码结构:
  • 这里写图片描述
  • 3,raw编码结构:
  • 这里写图片描述
  • 4,int编码结构:
  • 这里写图片描述
  • 5,raw和embstr编码的区别。
    • embstr编码无论是创建字符串对象还是释放内存,都只需1次,而raw编码需要2次。
    • embstr编码的字符串对象所有数据都保存在一块连续的内存里面。能够更好地利用缓存带来的优势。

四,列表对象。


  • 1,列表对象的编码可以是Ziplist或者是linkedlist。
  • 2,ziplist编码结构:
  • 这里写图片描述
  • 3,linkedlist编码结构:
  • 这里写图片描述
  • 4,编码转换,
    • 满足以下的两个条件时,列表对象会使用ziplist.
      • 1)列表对象保存的所有字符串元素的长度都小于64字节。
      • 2)列表对象保存的元素数量小于512.不能满足这两个条件的列表对象需要采用linkedlist编码。

五,哈希对象。


  • 1,哈希对象的编码可以是ziplist或者hashtable。
  • 2,ziplist编码结构:
  • 这里写图片描述
  • 这里写图片描述
  • 3,hashtable编码结构:
  • 这里写图片描述
  • 4,编码转换:
    • 满足一下两个条件,哈希对象使用ziplist编码。
      • 1)哈希对象保存的所有键值对的键和值的字符串长度都小于64字节。
      • 2)哈希对象保存的键值对数量小于512.不能满足这两个条件的哈希对象需要采用hashtable编码。

六,集合对象。


  • 1,集合对象的编码可以是inset或者hashtable。
  • 2,inset编码结构和hashtable编码结构:
  • 这里写图片描述
  • 3, 编码转换。
    • 满足一下两个条件,哈希对象使用inset编码。
      • 1)集合对象保存的所有元素都是整数值。
      • 2)集合对象保存的键值对数量小于512.不能满足这两个条件的哈希对象需要采用hashtable编码。

七,有序集合对象。


  • 1,有序集合对象的编码可以是ziplist或者skiplist。zset结构中dict字典为有序集合创建了一个从成员到分值的映射。zset会同时使用跳跃表和字典来保存有序集合元素。字典可以实现O(1)复杂度查找成员变量。跳跃表具备范围性操作的优点。
  • 2,ziplist编码结构:
  • 这里写图片描述
  • 这里写图片描述
  • 3,skiplist编码结构:
  • 这里写图片描述
  • 4, 编码转换。
    • 满足一下两个条件,哈希对象使用ziplist编码。
      • 1)有序集合对象保存的所有元素数量小于128个。
      • 2)有序集合对象保存的所有元素成员长度都小于64.不能满足这两个条件的哈希对象需要采用skiplist编码。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值