|NO.Z.00062|——————————|BigDataEnd|——|Hadoop&Redis.V07|——|Redis.v07|RedisDB结构.v07|10种encoding|

一、RedisObject结构10种encoding
### --- 10种encoding

~~~     encoding 表示对象的内部编码,占 4 位。
~~~     Redis通过 encoding 属性为对象设置不同的编码
~~~     对于少的和小的数据,Redis采用小的和压缩的存储方式,体现Redis的灵活性
~~~     大大提高了 Redis 的存储量和执行效率
### --- 比如Set对象:

~~~     intset : 元素是64位以内的整数
~~~     hashtable:元素是64位以外的整数
### --- 如下所示:

127.0.0.1:6379> sadd set:001 1 3 5 6 2
(integer) 5
127.0.0.1:6379> object encoding set:001
"intset"
127.0.0.1:6379> sadd set:004 1 100000000000000000000000000 9999999999
(integer) 3
127.0.0.1:6379> object encoding set:004
"hashtable"
二、示例
### --- 1、String

int、raw、embstr
int
REDIS_ENCODING_INT(int类型的整数)
127.0.0.1:6379> set n1 123
OK
127.0.0.1:6379> object encoding n1
"int"
### --- 2、embstr

~~~     REDIS_ENCODING_EMBSTR(编码的简单动态字符串)
~~~     小字符串 长度小于44个字节
127.0.0.1:6379> set name:001 zhangfei
OK
127.0.0.1:6379> object encoding name:001
"embstr"
### --- 3、raw

~~~     REDIS_ENCODING_RAW (简单动态字符串)
~~~     大字符串 长度大于44个字节
127.0.0.1:6379> set address:001
asdasdasdasdasdasdsadasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdas
dasdasdas
OK
127.0.0.1:6379> object encoding address:001
"raw"
### --- 4、list

~~~     列表的编码是quicklist。
~~~     REDIS_ENCODING_QUICKLIST(快速列表)
127.0.0.1:6379> lpush list:001 1 2 5 4 3
(integer) 5
127.0.0.1:6379> object encoding list:001
"quicklist"
### --- 5、hash

~~~     散列的编码是字典和压缩列表
### --- 6、dict

~~~     REDIS_ENCODING_HT(字典)
~~~     当散列表元素的个数比较多或元素不是小整数或短字符串时。
127.0.0.1:6379> hmset user:003
username111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111 zhangfei password 111 num
2300000000000000000000000000000000000000000000000000
OK
127.0.0.1:6379> object encoding user:003
"hashtable"
### --- 7、ziplist

~~~     REDIS_ENCODING_ZIPLIST(压缩列表)
~~~     当散列表元素的个数比较少,且元素都是小整数或短字符串时。
127.0.0.1:6379> hmset user:001 username zhangfei password 111 age 23 sex M

OK
127.0.0.1:6379> object encoding user:001
"ziplist"
### --- 8、set

~~~     集合的编码是整形集合和字典
### --- 9、intset

~~~     REDIS_ENCODING_INTSET(整数集合)
~~~     当Redis集合类型的元素都是整数并且都处在64位有符号整数范围内(<18446744073709551616)
127.0.0.1:6379> sadd set:001 1 3 5 6 2
(integer) 5
127.0.0.1:6379> object encoding set:001
"intset"
### --- 10、dict

~~~     REDIS_ENCODING_HT(字典)
~~~     当Redis集合类型的元素都是整数并且都处在64位有符号整数范围外(>18446744073709551616)
127.0.0.1:6379> sadd set:004 1 100000000000000000000000000 9999999999
(integer) 3
127.0.0.1:6379> object encoding set:004
"hashtable"
### --- 11、zset

~~~     有序集合的编码是压缩列表和跳跃表+字典
### --- 12、ziplist

~~~     REDIS_ENCODING_ZIPLIST(压缩列表)
~~~     当元素的个数比较少,且元素都是小整数或短字符串时。
127.0.0.1:6379> zadd hit:1 100 item1 20 item2 45 item3
(integer) 3
127.0.0.1:6379> object encoding hit:1
"ziplist"
### --- 13、skiplist + dict

~~~     REDIS_ENCODING_SKIPLIST(跳跃表+字典)
~~~     当元素的个数比较多或元素不是小整数或短字符串时。
127.0.0.1:6379> zadd hit:2 100
item1111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111 20 item2 45 item3
(integer) 3
127.0.0.1:6379> object encoding hit:2
"skiplist"

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

posted on   yanqi_vip  阅读(75)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示