开发
开发 RedisTimeSeries
开发RedisTimeSeries涉及设置开发环境(可以是基于Linux或macOS的),构建RedisTimeSeries模块,运行测试和基准测试,以及调试RedisTimeSeries模块及其测试。
克隆 git 仓库
通过调用以下命令,RedisTimeSeries模块及其子模块被克隆:
git clone --recursive https://github.com/RedisTimeSeries/RedisTimeSeries.git
在隔离环境中工作
在隔离环境中进行开发有几个原因,比如保持工作站的清洁,以及为不同的Linux发行版进行开发。 最通用的隔离环境选项是虚拟机(使用Vagrant非常容易设置)。 Docker是一个更加灵活的解决方案,因为它提供了一个几乎即时的解决方案:
ts=$(docker run -d -it -v $PWD:/build debian:bullseye bash)
docker exec -it $ts bash
然后,在容器内,cd /build
并像往常一样继续。
在这种模式下,所有安装都保留在 Docker 容器的范围内。
退出容器后,您可以使用上述 docker exec
重新调用容器,或者将容器的状态提交到镜像中,并在以后的阶段重新调用它:
docker commit $ts ts1
docker stop $ts
ts=$(docker run -d -it -v $PWD:/build ts1 bash)
docker exec -it $ts bash
安装先决条件
要构建和测试 RedisTimeSeries,您需要根据底层操作系统安装几个软件包。目前,我们支持 Ubuntu/Debian、CentOS、Fedora 和 macOS。
如果你安装了gnu make
,你可以执行
cd RedisTimeSeries
make setup
或者,只需调用以下内容:
cd RedisTimeSeries
git submodule update --init --recursive
./deps/readies/bin/getpy3
./system-setup.py
请注意,system-setup.py
将在您的系统上安装各种包,使用本地的包管理器和pip。这在Linux上需要root权限(即sudo
)。
如果您希望避免这种情况,您可以:
- 查看
system-setup.py
并手动安装包, - 使用如上所述的隔离环境,
- 使用Python虚拟环境,因为已知在不隔离的情况下使用Python安装时容易受到影响。
安装Redis
作为一般规则,最好运行最新版本的Redis。
如果您的操作系统有Redis包,您可以使用操作系统的包管理器进行安装。
否则,你可以调用 ./deps/readies/bin/getredis
。
获取帮助
make help
提供了开发功能的快速摘要。
从源代码构建
make
将构建 RedisTimeSeries。
构建产物被放置在 bin/linux-x64-release
(或类似位置,根据您的平台和构建选项)。
使用make clean
来移除构建产物。make clean ALL=1
将移除整个二进制产物目录。
使用RedisTimeSeries运行Redis
以下将运行 redis
并加载 RedisTimeSeries 模块。
make run
你可以在另一个终端打开redis-cli
来与其交互。
运行测试
该模块包括一组基本的单元测试和集成测试:
- C单元测试,位于
src/tests
,通过make unit_tests
运行。 - Python 集成测试(由 RLTest 启用),位于
tests/flow
,通过make flow_tests
运行。
可以通过调用make test
来运行所有测试。
可以使用TEST
参数运行单个测试,例如make flow_test TEST=file:name
。
调试
要构建用于调试的版本(启用符号信息并禁用优化),请运行make DEBUG=1
。
然后可以使用make run DEBUG=1
来调用gdb
。
除了在gdb
中设置断点的常规方法外,还可以使用BB
宏在RedisTimeSeries代码中设置断点。它仅在gdb
下运行时有效。
同样地,在单测试模式下进行Python测试时,可以通过在测试中使用BB()
函数来设置断点。这将调用pudb
。
这两种方法可以结合使用:可以在流程测试中设置断点,当到达断点时,将gdb
连接到redis-server
进程以调试模块。