跳到主要内容

Redis Stack 与 模块 (Modules)

现代 Redis 已经不仅是一个 Key-Value 存储。Redis Stack 扩展了 Redis OSS 的核心能力,增加了 JSON、Search、TimeSeries 等现代数据组件。

什么是 Redis Stack?

Redis Stack 是 Redis 的一套完整组合,集成了以下核心模块:

  • RedisJSON:处理复杂的 JSON 数据结构。
  • RediSearch:支持高性能全文检索和聚合查询。
  • RedisTimeSeries:处理时序数据。
  • RedisBloom:提供布隆过滤器、Cuckoo 过滤器等多维概率性数据。

RedisJSON 常用操作

RedisJSON 解决了存储 JSON 对象后无法局部更新和查询的痛点。

# 设置 JSON 文档
JSON.SET user:1 $ '{"name":"Alice","age":25,"tags":["tech","redis"]}'

# 获取指定字段
JSON.GET user:1 $.name # ["Alice"]
JSON.GET user:1 $.tags[0] # ["tech"]

# 局部更新
JSON.NUMINCRBY user:1 $.age 1
JSON.ARRAPPEND user:1 $.tags '"cloud"'

RediSearch 全文搜索

RediSearch 将 Redis 变成了搜索服务器,甚至可以替代简单的 Elasticsearch 场景。

# 创建索引
FT.CREATE idx:users ON HASH PREFIX 1 user: SCHEMA name TEXT SORTABLE age NUMERIC

# 搜索
FT.SEARCH idx:users "@name:Ali*"
FT.SEARCH idx:users "*" FILTER age 20 30

RedisBloom 布隆过滤器

用于在千万级的数据量下判断一个元素是否存在,空间占用极低,但存在一定的误报率。

# 添加元素
BF.ADD filter "user:123"

# 检查是否存在
BF.EXISTS filter "user:123" # 1 (可能存在) 或 0 (一定不存在)

时序数据 (RedisTimeSeries)

非常适合用于存储物联网传感器的每秒指标或监控数据。

# 创建时序键
TS.CREATE sensors:temp RETENTION 60000

# 添加数据点
TS.ADD sensors:temp 1727000000 25.5
TS.ADD sensors:temp 1727000001 25.8

# 查询范围平均值
TS.RANGE sensors:temp 1727000000 1727000010 AGGREGATION avg 5000

为什么使用 Redis Stack?

  1. 统一平台:无需为了全文索引或时序数据额外引入复杂系统。
  2. 极致性能:模块直接运行在 Redis 核心中,避免了数据同步延迟。
  3. 开发者友好:提供丰富的编程模型,支持强类型的 JSON 读写。

如何部署?

  • Dockerdocker run -p 6379:6379 redis/redis-stack:latest
  • Redis Cloud:由官方直接托管支持。

参考