JSON 开发者笔记
提示
来自deepseek解释
原文链接:https://redis.io/docs/latest/develop/data-types/json/developer/
开发 Redis JSON 涉及设置开发环境(可以基于 Linux 或 macOS)、构建 RedisJSON(提供 JSON 功能的 Redis 模块)、运行测试和基准测试,以及调试 JSON 模块及其测试。
克隆 Git 仓库
要克隆 RedisJSON 模块及其子模块,请运行:
git clone --recursive https://github.com/RedisJSON/RedisJSON.git在隔离环境中工作
使用隔离环境进行开发有多种原因,例如保持工作站干净,或者为不同的 Linux 发行版进行开发。
您可以使用虚拟机作为隔离开发环境。要设置一个,您可以使用 Vagrant 或 Docker。
使用 Docker 设置虚拟机:
rejson=$(docker run -d -it -v $PWD:/build debian:bullseye bash)
docker exec -it $rejson bash然后在容器内运行 cd /build。
在这种模式下,所有安装都保持在 Docker 容器范围内。退出容器后,您可以使用之前的 docker exec 命令重新启动它,或者将容器的状态保存为镜像并在稍后恢复:
docker commit $rejson redisjson1
docker stop $rejson
rejson=$(docker run -d -it -v $PWD:/build redisjson1 bash)
docker exec -it $rejson bash您可以将 debian:bullseye 替换为您选择的操作系统。如果使用与宿主机相同的操作系统,构建完成后可以在宿主机上运行 RedisJSON 二进制文件。
安装前提条件
构建和测试 RedisJSON 需要安装多个软件包,具体取决于底层操作系统。目前,我们支持 Ubuntu/Debian、CentOS、Fedora 和 macOS。
进入 RedisJSON 目录并运行:
$ ./sbin/setup这将使用系统本地的包管理器和 pip 在您的系统上安装各种软件包。它会自行调用 sudo,提示您授予权限。
如果您希望避免这种情况,可以:
- 查看
system-setup.py并手动安装软件包, - 使用
system-setup.py --nop显示安装命令而不执行它们, - 使用如上所述的隔离环境,
- 使用 Python 虚拟环境,因为 Python 安装在不隔离的情况下已知会存在问题:
python -m virtualenv venv; . ./venv/bin/activate
安装 Redis
通常,最好运行最新的 Redis 版本。
如果您的操作系统有 Redis 6.x 软件包,您可以使用操作系统包管理器安装它。
否则,您可以调用:
$ ./deps/readies/bin/getredis获取帮助
make help 提供了开发功能的快速摘要:
make setup # 安装前提条件
make build
DEBUG=1 # 构建调试变体
SAN=type # 使用 LLVM 消毒剂构建(type=address|memory|leak|thread)
VALGRIND|VG=1 # 构建用于 Valgrind 测试
make clean # 删除二进制文件
ALL=1 # 删除二进制目录
make all # 构建所有库和包
make test # 运行 cargo 和 python 测试
make cargo_test # 运行内置的 Rust 单元测试
make pytest # 使用 RLTest 运行流程测试
TEST=file:name # 从 `file` 中运行匹配 `name` 的测试
TEST_ARGS="..." # RLTest 参数
QUICK=1 # 仅运行常规测试
GEN=1 # 在独立 Redis 拓扑上运行常规测试
AOF=1 # 在独立 Redis 拓扑上运行 AOF 持久性测试
SLAVES=1 # 在独立 Redis 拓扑上运行复制测试
CLUSTER=1 # 在 Redis Open Source 集群拓扑上运行常规测试
VALGRIND|VG=1 # 使用 Valgrind 运行指定测试
VERBOSE=1 # 显示更多与 RLTest 相关的信息
make pack # 构建包(RAMP 文件)
make upload-artifacts # 将快照包复制到 S3
OSNICK=nick # 为特定 OSNICK 复制快照
make upload-release # 将发布包复制到 S3
上传操作的通用选项:
STAGING=1 # 复制到暂存实验室区域(用于验证)
FORCE=1 # 允许在 CI 环境之外操作
VERBOSE=1 # 显示更多细节
NOP=1 # 不复制,仅打印命令
make coverage # 执行覆盖率分析
make show-cov # 显示覆盖率分析结果(隐含 COV=1)
make upload-cov # 将覆盖率分析结果上传到 codecov.io(隐含 COV=1)
make docker # 为特定 Linux 发行版构建
OSNICK=nick # 要构建的 Linux 发行版
REDIS_VER=ver # 使用 Redis 版本 `ver`
TEST=1 # 构建后测试
PACK=1 # 创建包
ARTIFACTS=1 # 从 Docker 镜像复制构件
PUBLISH=1 # 构建后发布(即 docker push)
make sanbox # 为 CLang 消毒剂测试创建容器从源码构建
运行 make build 来构建 RedisJSON。
注意:
二进制文件根据平台和构建变体放置在
target/release/下。RedisJSON 使用 Cargo 作为其构建系统。
make build将调用 Cargo 以及完成构建所需的后续make命令。
使用 make clean 删除构建产物。make clean ALL=1 将删除整个 bin 子目录。
运行测试
有几组单元测试:
- Rust 测试,集成在源代码中,通过
make cargo_test运行。 - Python 测试(由 RLTest 支持),位于
tests/pytests,通过make pytest运行。
您可以使用 make test 运行所有测试。要仅运行特定测试,请使用 TEST 参数。例如,运行 make test TEST=regex。
您可以将模块的测试针对“嵌入式”一次性 Redis 实例运行,也可以针对您提供的实例运行。要使用“嵌入式”模式,您必须将 redis-server 可执行文件包含在 PATH 中。
您可以通过设置 REDIS_PORT 环境变量来覆盖嵌入式服务器的启动,例如:
$ # 使用现有的本地 Redis 实例来测试模块
$ REDIS_PORT=6379 make test调试
要包含调试信息,您需要在编译 RedisJSON 之前设置 DEBUG 环境变量。例如,运行 export DEBUG=1。
您可以在单测试模式下向 Python 测试添加断点。要设置断点,请在测试内部调用 BB() 函数。