Redis 的数据类型与编码
数据类型(对象)
Redis
主要有五种数据类型,包括 String
、List
、Hash
、Set
、Zset
,满足大部分的使用要求。
数据类型 | 可以存储的值 | 操作 | 应用场景 |
---|---|---|---|
REDIS_STRING | 字符串、整数或者浮点数 | 对整个字符串或者字符串的其中一部分执行操作 对整数和浮点数执行自增或者自减操作 |
做简单的键值对缓存,如短信验证码,配置信息等 |
REDIS_LIST | 列表 | 从两端压入或者弹出元素 对单个或者多个元素进行修剪, 只保留一个范围内的元素 |
存储一些有序且数据相对固定的数据,类似粉丝列表、文章的评论列表之类的数据 |
REDIS_HASH | 包含键值对的无序散列表 | 添加、获取、移除单个键值对 获取所有键值对 检查某个键是否存在 |
结构化的数据,比如一个对象、商品详情、个人信息详情、新闻详情等 |
REDIS_SET | 无序集合 | 添加、获取、移除单个元素 检查一个元素是否存在于集合中 计算交集、并集、差集 从集合里面随机获取元素 |
交集、并集、差集的操作,比如交集,可以把两个人的粉丝列表整一个交集、查找两个人的共同好友等 |
REDIS_ZSET | 有序集合 | 添加、获取、删除元素 根据分值范围或者成员来获取元素 计算一个键的排名 |
去重但可以排序,如获取排名前几名的用户 |
编码和底层实现
对象的编码:
编码常量 | 数据结构 | object encoding 命令输出 |
---|---|---|
REDIS_ENCODING_INT | long 类型的整数 | "int" |
REDIS_ENCODING_EMBSTR | embstr(Embedded String) 编码的简单动态字符串,长度不超过 32,分配一次内存 | "embstr" |
REDIS_ENCODING_RAW | 简单动态字符串(SDS),长度大于 32,分配两次内存 | "raw" |
REDIS_ENCODING_HT | 字典,元素较多较大时使用 | "hashtable" |
REDIS_ENCODING_LINKEDLIST | 双向链表,元素较多较大时使用 | "linkedlist" |
REDIS_ENCODING_ZIPLIST | 压缩列表,元素数量小于 512(hash、list)/128(zset) 且元素长度小于 64 字节时使用 | "ziplist" |
REDIS_ENCODING_INTSET | 整数集合,整数元素数量不超过 512 个时使用 | "intset" |
REDIS_ENCODING_SKIPLIST | 跳跃表和字典,元素较多较大时使用 | "skiplist" |
注意:
- 上图中
lish
应为list
。 - 网上说字符串长度不超过
39
时都是用embstr
存储,跟书中不一致,需要验证。
参考:《Redis 设计与实现》黄健宏 著