Redis 数据类型概览
Redis 不止是 key-value,它的 value 还分成多种数据类型,每种类型都有专属命令与适用场景。写代码前先想清楚「用什么类型存」,往往比写多少行代码更重要。
键值模型
Redis 是键值数据库,key 为字符串,value 是不同类型的数据:
SET article:1001:title "Redis 入门" # String 类型
HSET user:1001 name zhangsan age 18 # Hash 类型
RPUSH todo:list "买菜" "写代码" # List 类型
同前缀 key 常用来表达业务分组,如 user:1001 表示用户 1001 的数据。
数据类型全景
常用数据类型一览:
| 类型 | 命令前缀 | 底层形态 | 一句话用途 |
|---|---|---|---|
| String | SET/GET | 字符串/整数 | 缓存、计数器、Session |
| Hash | HSET/HGET | 哈希表 | 对象/结构化字段 |
| List | LPUSH/RPUSH | 双向链表 | 消息队列、时间线 |
| Set | SADD/SMEMBERS | 哈希表 | 去重、交并差集合运算 |
| ZSet | ZADD/ZRANGE | 跳表+哈希 | 排行榜、按分数排序 |
| Bitmap | SETBIT/GETBIT | 位数组 | 签到、在线状态 |
| HyperLogLog | PFADD/PFCOUNT | 基数估计 | 海量去重计数 |
| GEO | GEOADD/GEOSEARCH | 基于 ZSet | 附近的人/门店 |
| Stream | XADD/XREAD | 日志流 | 可靠消息队列 |
后四种可看作基于前几种的扩展能力,本教程第 06~10 章先讲五种核心类型。
如何选择类型
按业务形态对号入座:
- 单个值、计数、防重令牌 → String;
- 一个对象的多个字段 → Hash;
- 有序追加、按序消费 → List;
- 去重、共同好友、标签 → Set;
- 要排序的集合、TopN → ZSet;
- 位状态统计(签到 30 天)→ Bitmap。
选错类型的典型后果:用 String 存对象 JSON,改一个字段要整串读写,远不如 Hash 灵活。
通用键操作
所有类型的 key 都适用同一套键命令:
KEYS * # 列出所有键(生产禁用,见第 11 章)
TYPE user:1001 # 查看键类型
# 输出:hash
EXISTS user:1001 # 是否存在
# 输出:(integer) 1
DEL user:1001 # 删除键
小结
Redis 通过多种 value 类型把「数据库」扩展成了「数据结构服务器」。本章先建立全貌:String/Hash/List/Set/ZSet 是核心五种,Bitmap/HyperLogLog/GEO/Stream 是扩展能力。下一步逐章上手每种类型的命令。