开发

开发 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 进程以调试模块。

RATE THIS PAGE
Back to top ↑