TYPE 是什么
TYPE 返回某个键的数据类型,取值包括 string、list、set、zset、hash、stream,键不存在时返回 none。它是排查 WRONGTYPE 报错的第一站:当同一个键被两条业务线用不同结构写入时,后写的一方会覆盖原数据或者直接报错,用 TYPE 看一眼就能确认类型有没有被别的路径改写过。它自身开销极低,可以放心在生产环境直接调用,也适合写进巡检脚本做批量抽样。
基本信息
| 语法 | TYPE key |
|---|---|
| 返回值 | string、list、set、zset、hash、stream 或 none |
| 复杂度 | O(1),可以放心用于排查 |
| 典型用途 | 排查 WRONGTYPE、数据巡检 |
| 配套命令 | OBJECT ENCODING 查看内部编码与内存优化 |
典型使用场景
- 排查报错信息里的 WRONGTYPE 到底来自哪里
- 数据巡检,确认键的类型符合设计
- 确认某次发布没有把键的类型改掉
- 排查多个业务共用同一键名造成的类型冲突
- 上线前抽查关键键的数据结构
类型判断示例
类型判断示例
SET s v
TYPE s # string
RPUSH l a
TYPE l # list
ZADD z 1 a
TYPE z # zset
HSET h f v
TYPE h # hash
XADD st * k v
TYPE st # stream
TYPE missing # none:键不存在
OBJECT ENCODING s # embstr:查看内部编码返回值对照
| 返回值 | 对应结构 | 常见用途 |
|---|---|---|
| string | 字符串 | 缓存值、计数、序列化对象 |
| list | 列表 | 队列与栈结构 |
| set | 集合 | 去重与成员判断 |
| zset | 有序集合 | 排行榜与延时队列 |
| hash | 哈希 | 对象属性的字段集合 |
| stream | 流 | 消息队列与消费组 |
遇到 WRONGTYPE 报错时,先用 TYPE 检查类型是否被别的写入路径改过,再核对键名规范,往往能当场定位到冲突的业务线,不必逐行翻代码。
TYPE 只给出大类,想看内部编码与内存优化效果要用 OBJECT ENCODING,例如小整数会被优化成 int 编码,节省可观的内存。内部编码还会随数据规模自动变化,小集合从紧凑编码切换成哈希表编码的过程,也解释了为什么内存增长有时会突然变快。
同一个键被不同业务用不同类型写入属于设计缺陷:键名规范要统一,命名空间与用途在项目初期就约定清楚,事后治理的成本会高得多。