前因

  • 在使用 FastAPI 框架时, 用到了 redis-om 包, 但是在使用时, 发现 redis-om 包默认不支持 Json 格式的数据, 需要引入对应的模块才可以. 详见: Github-issue

  • 仅限使用的这个框架, 如果 FastAPI 中能有像 Spring 中的 RedisTemplate 那样的工具, 或者有像 gsonfastjson 这种序列化的包, 那就好了.

window 使用 RedisJSON

  • 下载 redis

  • 下载 rejson

  • 安装 RedisJson 模块,需要先安装 Redis,然后再安装 RedisJson 模块。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ...
    # loadmodule .\path\to\my_module.dll
    # loadmodule c:\path\to\other_module.dll

    # 加载模块
    loadmodule .\ReJSON_for_Windows_1_0_6_1\ReJSON.dll
    ...
    ...
    ...
    # requirepass foobared

    # 设置密码
    requirepass 123456
    ...
  • 运行 redis-server.exe redis.windows.conf 启动服务

ubuntu 使用 RedisJSON

  • 下载:Download Redis Enterprise | Redis 需要登录

  • 下载对应系统版本的 RedisJson !下载对应系统版本的 RedisJson !下载对应系统版本的 RedisJson !(重要)

  • 更新 docker-compose.yml 中的 redis

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    ...

    redis:
    restart: always # 重启策略
    image: "redis:latest" # 镜像名 (${image}:${tag})
    container_name: "redis" # 容器名 (自定义)
    ports:
    - "6379:6379" # 端口号 (宿主机:容器)
    volumes: # 数据卷
    - /opt/docker/redis/redis.conf:/etc/redis/redis.conf # 配置文件 (宿主机:容器)
    - /opt/docker/redis/data:/data # 数据文件夹 (宿主机:容器)
    - /opt/docker/redis/opt:/opt # redis module (宿主机:容器)
    command: [ "redis-server","/etc/redis/redis.conf" ] # 启动 redis 服务
    networks: # 网络桥段
    - app

    ...
  • 复制 RedisJson 中的文件到 /opt/docker/redis/opt/ 文件夹下, 并赋予权限 (重要)

    1
    2
    # 赋予 rejson.so 执行权限 (重要)
    chmod +x ./rejson.so

  • 修改 redis.conf 中的 loadmodule

    1
    2
    # 加载模块
    loadmodule /opt/rejson.so

  • 重新跑 docker-compose.yml 即可

  • 错误排查

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 查看容器日志
    docker logs redis

    # 查看最新 100 行日志
    docker logs --tail 100 redis

    ## 错误信息1:
    Module /opt/rejson.so failed to load: It does not have execute permissions.
    Can't load module from /opt/rejson.so: server aborting

    rejson.so 文件没有权限