Redis 常用数据类型总览
1. String(字符串)
数据结构
- int:存储整数值
- SDS(Simple Dynamic String):存储字符串或二进制数据
- embstr:存储小于 44 字节(Redis 5.0)的字符串
- raw:存储大于 44 字节的字符串
常用命令
SET key value # 设置键值
GET key # 获取值
INCR key # 计数器+1
DECR key # 计数器-1
EXPIRE key seconds # 设置过期时间
应用场景
- 缓存对象
- 计数器(如点赞数、阅读数)
- 分布式锁
- 共享 session
Hash
Redis Hash的本质是:
一个 key 下,维护一个 field → value 的字典结构(哈希表)
可以理解为:
- Hash = 小型的对象存储
- 每个 field 都是独立的 key
- 所有 field/value 都是字符串类型(string/binary safe)
user:1
├── name: "forrest"
├── age: "21"
└── country: "China"
所以Redis Hash
常用命令
HSET key field value # 设置字段值
HGET key field # 获取字段值
HMSET key field1 value1 field2 value2 # 批量设置
HGETALL key # 获取所有字段和值
应用场景
- 存储对象数据
- 购物车系统
3. List(列表)
数据结构
- Redis 3.2 之后统一使用 quicklist 实现
- quicklist 是 ziplist 和 linkedlist 的组合
常用命令
LPUSH key value # 左侧插入
RPUSH key value # 右侧插入
LPOP key # 左侧弹出
RPOP key # 右侧弹出
LRANGE key start stop # 获取指定范围的元素
应用场景
- 消息队列
- 最新消息列表
- 文章列表
4. Set(集合)
数据结构
- intset(整数集合):当元素都是整数且元素个数小于 512 个时使用
- hashtable(哈希表):当元素不满足 intset 条件时使用
常用命令
SADD key member # 添加成员
SREM key member # 删除成员
SMEMBERS key # 获取所有成员
SINTER key1 key2 # 交集运算
SUNION key1 key2 # 并集运算
应用场景
- 好友关系
- 点赞功能
- 标签系统
- 抽奖系统
5. Zset(有序集合)
数据结构
- ziplist(压缩列表):元素数量小于 128 且值小于 64 字节时使用
- skiplist(跳跃表)+ hashtable:当元素不满足 ziplist 条件时使用
常用命令
ZADD key score member # 添加成员和分数
ZRANGE key start stop # 按分数升序获取范围内的成员
ZRANK key member # 获取成员排名
ZSCORE key member # 获取成员分数
应用场景
- 排行榜
- 带权重的消息队列
- 排序系统
6. 特殊数据类型
Bitmap
- 基于 String 类型的位操作
- 适用于二值状态统计(如签到、在线状态)
HyperLogLog
- 用于基数统计
- 占用空间小,有一定误差率
- 适用于统计网站 UV 等
GEO
- 地理位置信息存储
- 基于 Zset 实现
- 适用于位置服务(如附近的人)
Stream
- Redis 5.0 新增的消息队列
- 支持消费组模式
- 提供持久化和确认机制