redis中有五种常用对象
我们所说的对象的类型大多是值的类型,键的类型大多是字符串对象,值得类型大概有以下几种,但是无论哪种都是基于redisObject实现的
redisObject的结构如下
type的可选值有五种.分别是
encoding的可选值有八种
type和encoding共同决定了数值对象的底层结构和存储
字符串对象的编码可以是int,embstr和row
redis中的字符串对象是最常用的数据对象之一,redis中的许多键都是采用的字符串对象
字符串类型在redis中根据情况不同有3中情况
ps: embstr类型的字符串在修改后总会变成row编码类型
列表的编码可以是linkedlist或者ziplist
这个时候会使用,ziplist来作为列表对象的编码, 当不满足这两个条件的时候使用linkedlist
ps:这两个值是更改的,list-max-ziplist-value 和 list-max-ziplist-entries
哈希对象的编码可以是ziplist或者hashtable
字典的每一个键和值都是一个字符串对象
满足以上两个条件,使用ziplist存储,否则采用hashtable存储
ps:这两个值是更改的,hash-max-ziplist-value 和 hash-max-ziplist-entries
集合对象的编码可以是intset或者hashtable
当集合对象满足以下两个条件的时候采用intset
不满足以上两个条件都是用hashtable存储
ps: 该数值可以使用set-max-intset-entries设置
有序集合对象的编码可以是ziplist或者skiplist
有序集合对象跟前面的几个对象不大一样
zsl中保存一个跳跃表,表节点的对象即使键,score即是分值,该结构主要为 zrange,zrank等函数服务
同时还保存一个dict,dict中也保存有键和对应的分值,获取某键的函数zscore使用这个结构,
同时持有字典和跳跃表是为了性能考虑
当有序集合满足一下两个条件时候,使用ziplist编码
不能满足以上两个条件的使用skiplist
redis的对象资源垃圾回收是基于引用计数
当一个对象被使用一次,引用计数增加1
当一个引用被销毁,对象的引用计数会减1
当一个对象的引用计数为0,会被销毁
redis默认创建了0到9999的数字对象供1万个
其他用到这些对象的时候可以不用创建新对象,直接使用已有的对象。
下面关于Redis的文章您也可能喜欢,不妨参考下: