想要在 Docker 环境中为 Redis 增加 RedisJSON 模块,核心有两种实现方式:直接使用官方 Redis Stack 镜像(最简单) 和自定义构建 Redis 镜像并加载 RedisJSON 模块。我会优先推荐最适合新手、零配置的官方镜像方案,同时也提供自定义方案满足特殊需求。

方案 1:使用官方 Redis Stack 镜像(推荐,零配置)

Redis 官方已经将 RedisJSON、RedisSearch、RedisVector 等模块打包到redis/redis-stack镜像中,这是最简单、最稳定的方式,无需手动配置模块。
1.1 快速启动命令

# 启动Redis Stack容器(包含RedisJSON、RedisSearch等所有需要的模块)
# -d 后台运行 | --name 自定义容器名 | -p 端口映射 | -v 数据持久化
docker run -d \
  --name redis-with-json \
  -p 6379:6379 \
  -v redis-stack-data:/data \
  redis/redis-stack:latest

1.2 验证 RedisJSON 是否生效

# 进入容器的redis-cli
docker exec -it redis-with-json redis-cli

# 测试JSON.SET命令(核心验证)
JSON.SET test:json $ '{"name":"test","value":123}'

# 读取JSON数据,验证是否存储成功
JSON.GET test:json

# 查看已加载的模块(能看到ReJSON即RedisJSON)
MODULE LIST

如果返回OK和{“name”:“test”,“value”:123},说明 RedisJSON 模块已正常启用。

方案 2:自定义 Redis 镜像(加载 RedisJSON 模块)

如果你需要基于原生 Redis 镜像自定义(比如指定 Redis 版本),可以通过 Dockerfile 手动加载 RedisJSON 模块:
2.1 编写 Dockerfile
创建Dockerfile文件,内容如下(以 Redis 7.2 为例):

# 基础镜像:选择与RedisJSON兼容的Redis版本
FROM redis:7.2-alpine

# 安装依赖(用于下载模块)
RUN apk add --no-cache wget

# 下载RedisJSON模块(适配Redis 7.x的版本)
# 注意:根据CPU架构选择(amd64/arm64),这里默认amd64
RUN wget https://github.com/RedisJSON/RedisJSON/releases/download/v2.6.0/redisjson-2.6.0-linux-amd64.so -O /usr/lib/redis/modules/redisjson.so

# 设置权限
RUN chmod 755 /usr/lib/redis/modules/redisjson.so

# 修改Redis配置,加载RedisJSON模块
RUN echo "loadmodule /usr/lib/redis/modules/redisjson.so" >> /etc/redis/redis.conf

# 暴露端口
EXPOSE 6379

# 启动Redis(使用自定义配置)
CMD ["redis-server", "/etc/redis/redis.conf"]

2.2 构建并运行自定义镜像

# 构建镜像(命名为redis-with-json:custom)
docker build -t redis-with-json:custom .

# 运行容器
docker run -d \
  --name redis-custom \
  -p 6379:6379 \
  -v redis-custom-data:/data \
  redis-with-json:custom

2.3 验证模块加载
执行和方案 1 相同的验证命令(JSON.SET/MODULE LIST),确认 RedisJSON 生效。
方案 3:为已有 Redis 容器添加 RedisJSON(临时方案)
如果你的 Redis 容器已在运行,且不想重建镜像,可以通过挂载模块文件 + 重启的方式(适合测试环境):

# 1. 进入宿主机,下载RedisJSON模块
wget https://github.com/RedisJSON/RedisJSON/releases/download/v2.6.0/redisjson-2.6.0-linux-amd64.so -O /tmp/redisjson.so

# 2. 将模块文件复制到运行中的Redis容器内
docker cp /tmp/redisjson.so 你的容器名:/usr/lib/redis/modules/

# 3. 进入redis-cli,动态加载模块(无需重启容器)
docker exec -it 你的容器名 redis-cli
127.0.0.1:6379> MODULE LOAD /usr/lib/redis/modules/redisjson.so

# 4. 验证
MODULE LIST  # 查看是否有ReJSON
JSON.SET test $ '{"key":"value"}'  # 测试命令

⚠️ 注意:动态加载的模块在容器重启后会失效,生产环境建议用方案 1/2。

总结

  1. 首选方案 1:官方 Redis Stack 镜像开箱即用,包含 RedisJSON、RedisSearch 等 Spring AI 所需的所有模块,无需手动配置。
  2. 自定义需求选方案 2:通过 Dockerfile 构建镜像,可精准控制 Redis 和模块版本。
  3. 临时测试选方案 3:动态加载模块,适合快速验证,但不适合生产环境。
  4. 核心验证标准:执行JSON.SET命令返回OK,即可解决你之前遇到的ERR unknown command JSON.SET异常。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐