Redis 支持多种灵活的数据类型,每种类型针对特定场景优化。以下是 **Redis 最常用的 5 种数据类型**及其核心特点和应用场景:
1. 字符串(String)
- 描述:最基本的数据类型,可存储文本、数字(整数/浮点数)或二进制数据(≤512MB)。
- 常用命令:
SET key value
:设置值GET key
:获取值INCR key
:原子递增(计数器)SETNX key value
:不存在时才设置(分布式锁)
- 场景:
- 缓存(HTML片段、用户信息)
- 计数器(访问量、点赞数)
- 分布式锁(
SETNX
)
2. 哈希(Hash)
- 描述:键值对集合,适合存储 对象(如用户信息)。
- 常用命令:
HSET key field value
:设置字段值HGET key field
:获取字段值HGETALL key
:获取所有字段和值HINCRBY key field increment
:递增字段值
- 场景:
- 用户资料存储(key=用户ID,field=姓名/年龄等)
- 商品属性管理(key=商品ID,field=价格/库存等)
- 优势:可单独操作字段,避免序列化整个对象。
3. 列表(List)
- 描述:按插入顺序排序的 字符串列表,支持双向操作。
- 常用命令:
LPUSH key value
:左侧插入RPUSH key value
:右侧插入LPOP key
:左侧弹出LRANGE key start stop
:获取范围数据
- 场景:
- 消息队列(
LPUSH
+BRPOP
实现生产者-消费者) - 最新动态(如朋友圈时间线)
- 日志记录(按时间顺序存储)
- 消息队列(
4. 集合(Set)
- 描述:无序且唯一 的字符串集合,支持交并差运算。
- 常用命令:
SADD key member
:添加元素SMEMBERS key
:获取所有元素SINTER key1 key2
:求交集SISMEMBER key member
:判断元素是否存在
- 场景:
- 标签系统(如文章标签)
- 共同好友(
SINTER
求交集) - 唯一性控制(如抽奖中奖用户)
5. 有序集合(Sorted Set / Zset)
- 描述:带 分数(score) 的集合,元素按分数排序(分数可重复,值唯一)。
- 常用命令:
ZADD key score member
:添加元素ZRANGE key start stop
:按排名范围获取ZRANGEBYSCORE key min max
:按分数范围获取ZRANK key member
:获取排名
- 场景:
- 排行榜(如游戏分数排名)
- 延时队列(分数=执行时间戳)
- 热点数据排序(分数=访问次数)
其他实用类型补充:
- 位图(Bitmap):
通过位操作存储布尔值(如用户签到记录,SETBIT user:sign:2024 100 1
)。 - HyperLogLog:
超小内存统计去重计数(如UV统计,误差率0.81%)。 - 地理空间(GEO):
存储经纬度,计算距离(GEODIST
)、附近位置(GEORADIUS
)。 - 流(Stream)(Redis 5.0+):
持久化消息队列,支持消费者组(类似Kafka)。
选择数据类型的关键原则:
- 数据结构匹配:存储对象用 Hash,排序用 Zset,去重用 Set。
- 操作效率:Zset 按分数范围查询复杂度 O(log N),Hash 单字段操作 O(1)。
- 内存优化:小对象用 String,大对象用 Hash 分字段存储。
💡 示例场景对比:
- 用户信息存储:
- ❌ 错误:用 String 存储整个 JSON(修改需全量读写)
- ✅ 正确:用 Hash 分字段存储(可单独更新年龄)
- 排行榜:
- ❌ 错误:用 List + 手动排序
- ✅ 正确:用 Zset 自动按分数排序
掌握这些类型及其适用场景,能极大提升 Redis 使用效率!