Redis数据类型
Redis数据类型
Redis中有五种基础数据类型:
- 字符串:String
- 集合:Set
- 有序集合:ZSet(Sorted Set)
- 哈希:Hash
- 列表:List
此外还有三种特殊类型:
- 基数统计:HyperLogLog
- 位图:Bitmap
- 地理位置:Geospatial
Redis不只是简单的 key–value 缓存,而是允许一个key对应多种复杂结构。
一、String(字符串)
最基础的数据类型。
特点
- key 对应一个字符串值
- 可以存字符串、数字、二进制数据
- 最大 512MB
常见命令
1 | SET key value |
典型应用
- 缓存对象
- 计数器(访问次数、点赞数)
- 分布式锁(SETNX)
例子
1 | SET page_view 100 |
访问量计数器就诞生了。
二、Hash(哈希)
本质是 key → field → value 的结构,类似 Java 的 Map<String, Map<String, String>>。
常见命令
1 | HSET user:1 name ZhangSan |
典型应用
存储对象信息:
1 | user:1 |
优点是:
- 可以只修改一个字段
- 比直接存 JSON 更节省内存
三、List(列表)
一个 有序、可重复的字符串列表,底层是 双向链表 + 压缩列表(新版是 quicklist)。
常见命令
1 | LPUSH list v1 |
典型应用
1️⃣ 消息队列
生产者:
1 | LPUSH queue msg1 |
消费者:
1 | RPOP queue |
2️⃣ 最新列表
例如微博时间线。
四、Set(集合)
无序、不重复的字符串集合。
常见命令
1 | SADD set a |
核心特性
支持数学集合运算:
1 | SINTER 交集 |
典型应用
- 好友关系
- 共同关注
- 标签系统
例子:
1 | user:1:follow -> {A,B,C} |
求共同关注:
1 | SINTER |
五、ZSet(Sorted Set,有序集合)
这是 Redis 最强的数据结构之一。
结构:
1 | value + score |
Redis 会按 score 排序。
常见命令
1 | ZADD rank 100 user1 |
典型应用
排行榜系统:
1 | user1 100 |
可以快速得到:
- 排名
- Top N
- 分数区间
六、BitMap
位图,本质是 位操作的字符串。
应用:
- 用户签到
- 在线状态统计
七、HyperLogLog
用于 基数统计(去重计数)。
例如:
- 统计网站 UV
优点:
- 只占 12KB
- 允许少量误差
八、Geo
用于 地理位置计算:
1 | GEOADD |
应用:
- 附近的人
- 附近商店
面试推荐总结回答(非常标准)
可以这样说:
Redis 常见的数据类型主要有五种:
String、Hash、List、Set、Sorted Set。String 用于缓存和计数器;
Hash 用于存储对象;
List 用于消息队列或时间线;
Set 用于去重和关系运算;
Sorted Set 用于排行榜等需要排序的场景。此外 Redis 还提供了一些扩展结构,比如 Bitmap、HyperLogLog 和 Geo,分别用于位统计、海量去重统计和地理位置计算。
