Redis 中常见的数据类型有哪些?
Redis 常见的数据类型包括 5 种基础类型(String、Hash、List、Set、Zset)和 3 种特殊类型(HyperLogLog、Bitmap、Geospatial)。以下是详细说明:
一、5 种基础数据类型
1. 字符串(String)
- 特点:
- 二进制安全,可存储任意格式数据(如文本、JSON、图片二进制流)。
- 支持原子性操作(如
INCR
/DECR
计数器)。 - 最大容量为 512MB。
- 应用场景:
- 缓存简单键值对(如用户 Token、配置信息)。
- 分布式锁(通过
SETNX
命令)。 - 限流计数器(如接口请求次数限制)。
2. 哈希(Hash)
- 特点:
- 键值对集合,适合存储对象(如用户信息、商品属性)。
- 字段可独立操作(如修改
HSET user:1 name "Alice"
中的name
字段)。 - 内存优化:少量字段用压缩列表(ZipList),大量字段转哈希表。
- 应用场景:
- 存储结构化数据(如用户年龄、昵称)。
- 对象级更新(避免全量序列化开销)。
3. 列表(List)
- 特点:
- 有序字符串集合,支持两端快速插入/删除(
LPUSH
/RPUSH
、LPOP
/RPOP
)。 - 底层实现:双向链表(Redis 3.2 前)或快速列表(QuickList,结合链表和压缩列表)。
- 有序字符串集合,支持两端快速插入/删除(
- 应用场景:
- 消息队列(生产者-消费者模型)。
- 最新动态列表(如社交媒体时间线)。
- 分页查询(通过
LRANGE
获取子集)。
4. 集合(Set)
- 特点:
- 无序唯一字符串集合,支持交集、并集、差集操作(如
SINTER
/SUNION
)。 - 底层实现:哈希表(确保唯一性)。
- 无序唯一字符串集合,支持交集、并集、差集操作(如
- 应用场景:
- 标签系统(如用户兴趣标签去重)。
- 社交关系(如共同好友计算)。
- 抽奖系统(随机选取不重复用户)。
5. 有序集合(Zset/Sorted Set)
- 特点:
- 唯一字符串集合,每个元素关联一个分数(Score),按分数排序。
- 支持范围查询(如
ZRANGEBYSCORE
获取排名区间)。 - 底层实现:跳表(SkipList)或压缩列表。
- 应用场景:
- 排行榜(如游戏积分、直播打赏)。
- 延迟队列(按执行时间排序任务)。
- 地理位置范围查询(结合
GEO
类型)。
二、3 种特殊数据类型
1. HyperLogLog
- 特点:
- 概率性数据结构,用于近似计算唯一元素数量(如 UV 统计)。
- 内存占用极低(12KB 可统计 2^64 个唯一值)。
- 应用场景:
- 大规模去重统计(如日活用户数)。
2. Bitmap(位图)
- 特点:
- 基于字符串的位操作,支持设置/获取位(
SETBIT
/GETBIT
)。 - 适合海量布尔值存储(如用户签到状态)。
- 基于字符串的位操作,支持设置/获取位(
- 应用场景:
- 用户行为统计(如连续签到天数)。
- 权限位掩码(如角色权限控制)。
3. Geospatial(地理空间)
- 特点:
- 存储地理坐标(经纬度),支持附近位置查询(如
GEORADIUS
)。 - 底层实现:有序集合(按距离排序)。
- 存储地理坐标(经纬度),支持附近位置查询(如
- 应用场景:
- LBS 服务(如附近商家、路径规划)。
三、其他数据类型
- Stream(流):Redis 5.0 引入,支持消息队列和消费者组功能,弥补 List 在消息可靠性上的不足。
总结
Redis 通过丰富的数据类型,覆盖了从简单缓存到复杂结构化数据的多样化需求。合理选择数据类型可显著提升性能并简化开发逻辑。例如:
- 简单缓存选 String;
- 对象存储选 Hash;
- 唯一值集合选 Set;
- 排序场景选 Zset;
- 大规模去重统计选 HyperLogLog。
我正在编程导航学习项目课程,和其他编程爱好者一起交流进步,你也一起来吧
点击进入