Redis 数据类型对比
常用数据类型
Strings: 存储文本或二进制数据。适用非结构化文档、计数器、开关标志、位图等简单场景。
Hashes: 在单个 key 下存储键-值对。适用字段较少的扁平对象(如用户信息片段)、需要按字段访问或原子更新的场景。
JSON: 存储结构化的层级数组和键值对象(JSON)。适用需要嵌套结构、路径查询或结合 Redis Search 做复杂索引的文档型数据。
Lists: 存储简单的字符串序列。适用队列、栈、日志或需要按顺序读取的线性结构。
Sets: 存储唯一字符串的集合。适用去重、成员检测、集合运算(交并差)等场景。
Sorted sets: 存储带分数的唯一字符串集合。适用排行榜、按分数/排名区间检索、优先级队列。
Streams: 存储条目序列,每条条目包含字段-值对并支持消费者组。适用日志、时序事件、多消费者场景与事件流处理。
面向特定用途的高度专业化数据类型(不常用)
Geospatial: 存储带有坐标的字符串,以便进行地理空间查询。适用附近搜索、地理位置服务、地图相关查询。
Vector sets: 存储带向量数据(及可选元数据)的字符串,用于向量相似度查询。适用语义搜索、推荐、相似度检索、向量搜索场景。
Probabilistic data types: 在大规模数据集上保持近似计数和其他统计信息。适用大规模唯一计数、频率估算、流量统计等需要空间效率的场景。
Time series: 存储带时间戳的实值数据点。适用监控指标、遥测数据、时序分析与告警。
如何选择数据类型
下面用三棵简单的 ASCII 决策树列出文档、集合与序列的常见判断逻辑,便于快速查阅。
文档(Documents)
是否需要嵌套的数据结构(字段与数组)或使用 Redis Search 做地理空间索引/查询?
├─ 是 -> Use JSON
└─ 否
└─ 是否需要使用 Redis Search 进行索引/查询(不含嵌套/地理)?
├─ 是 -> Use Hashes
└─ 否
└─ 是否需要对文档内的部分数据设置过期时间?
├─ 是 -> Use Hashes
└─ 否
└─ 是否需要频繁访问可用整数/位索引引用的简单字段?
├─ 是 -> Use Strings
└─ 否
└─ 是否需要频繁访问具有字符串或二进制值的字段?
├─ 是 -> Use Hashes
└─ 否 -> Use Strings
集合(Collections)
是否需要以某种顺序(任意顺序或字典序)检索元素?
├─ 是 -> Use Sorted sets
└─ 否
└─ 是否需要为集合中的每个键存储额外信息,并且不需要集合运算(交并差)?
├─ 是 -> Use Hashes
└─ 否
└─ 键是否总是已知范围内的整数索引?
├─ 是 -> Use Strings (bitmaps)
└─ 否 -> Use Sets
序列(Sequences)
是否需要维护任意优先级顺序、字典序、或经常按索引访问元素,或执行集合操作?
├─ 是 -> Use Sorted sets
└─ 否
└─ 是否需要按时间戳顺序存取或管理多个消费者读取该序列?
├─ 是 -> Use Streams
└─ 否 -> Use Lists