首页 > 中间件 > redis底层编码格式

redis底层编码格式

作者:bin

下面介绍5种类型中使用到的编码格式,以及内部转换逻辑:

1、字符串对象
字符串对象的编码可以是int、embstr及raw。
字符长度>39字节,embstr转raw
int数据追加字符,int转raw

redis.xiaoying.work:6379> set hello world
OK
redis.xiaoying.work:6379> OBJECT ENCODING hello
"embstr"

redis.xiaoying.work:6379> set hello this_is_a_super_long_text_this_is_a_super_long_text
OK
redis.xiaoying.work:6379> OBJECT ENCODING hello
"raw"

2、列表对象
列表对象的编码可以是ziplist 或者linkedlist。
列表有一个元素>64字节 或 列表列表总元素>512个,ziplist转linkedlist

redis.xiaoying.work:6379> lpush mylist 1 2 3 4 5 6 7 7 8
(integer) 9
//quicklist 实际上是 zipList 和 linkedList 的混合体
redis.xiaoying.work:6379> object encoding mylist
"quicklist"

3、哈希对象
哈希对象的编码可以是ziplist或者hashtable。
哈希有一个元素>64字节 或 列表列表总元素>512个,ziplist转hashtable

redis.xiaoying.work:6379> hset myhash name1 hao
(integer) 1
redis.xiaoying.work:6379> object encoding myhash
"ziplist"

4、集合对象
集合对象的编码可以是intset或者hashtable。
集合有一个元素不是整数 或 集合元素总数>512个,intset转hashtable

redis.xiaoying.work:6379> sadd markset 1 2 3
(integer) 3
redis.xiaoying.work:6379> object encoding markset
"intset"
redis.xiaoying.work:6379> sadd markset s
(integer) 1
redis.xiaoying.work:6379> object encoding markset
"hashtable"

5、有序集合对象
有序集合对象的编码可以是ziplist或者skiplist。
有序集合有一个元素>64字节 或者 有序集合元素总数>128个,ziplist转skiplist

redis.xiaoying.work:6379> zadd myscoreset 100 hao 90 xiaohao
(integer) 2
redis.xiaoying.work:6379> object encoding myscoreset
"ziplist"

您必须 [ 登录 ] 才能发表留言!