|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
分类:
bdv012-redis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」