Redis 的数据类型与编码

数据类型(对象)

Redis 主要有五种数据类型,包括 StringListHashSetZset,满足大部分的使用要求。

数据类型 可以存储的值 操作 应用场景
REDIS_STRING 字符串、整数或者浮点数 对整个字符串或者字符串的其中一部分执行操作
对整数和浮点数执行自增或者自减操作
做简单的键值对缓存,如短信验证码配置信息
REDIS_LIST 列表 从两端压入或者弹出元素
对单个或者多个元素进行修剪, 只保留一个范围内的元素
存储一些有序且数据相对固定的数据,类似粉丝列表、文章的评论列表之类的数据
REDIS_HASH 包含键值对的无序散列表 添加、获取、移除单个键值对
获取所有键值对
检查某个键是否存在
结构化的数据,比如一个对象商品详情个人信息详情新闻详情
REDIS_SET 无序集合 添加、获取、移除单个元素 检查一个元素是否存在于集合中
计算交集、并集、差集 从集合里面随机获取元素
交集、并集、差集的操作,比如交集,可以把两个人的粉丝列表整一个交集、查找两个人的共同好友
REDIS_ZSET 有序集合 添加、获取、删除元素
根据分值范围或者成员来获取元素
计算一个键的排名
去重但可以排序,如获取排名前几名的用户

Redis 数据类型

编码和底层实现

对象的编码:

编码常量 数据结构 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 设计与实现》黄健宏 著

posted @ 2021-09-10 21:45  ageovb  阅读(196)  评论(0编辑  收藏  举报