Engula CompatQuick(兼容性自测工具)
1. 声明与结论
- 技术路线:Engula 在 Redis 内核内实现了内核级存储引擎替换,沿用 Redis 的协议、命令处理与客户端生态。
- 兼容性结论:在设计与实现层面,Engula 2.1 与 Redis 7.2 理论上可实现 100% 兼容(协议与语义一致),应用无需修改代码或更换客户端。
2. 设计目标和对比方法
- 目标:验证 Engula 2.1 对 Redis 7.2 协议和数据结构的兼容程度。
- 指标:协议兼容性、数据结构兼容性。
- 对比方法说明:
- 以 Redis 7.2 的原生
make test 用例为基准,采用 Redis 原生测试框架,确保用例一致与可复现。
- 逐项对比测试结果,统计通过率和失败原因。
2.1 测试指标
- 数据结构兼容性:String、Hash、List、Set、Sorted Set、Stream、Bitmap、HyperLogLog、Geo 数据结构的操作一致性。
2.2 验证原理
Redis 使用基于 Tcl 的测试框架(test.tcl + 多个 unit/*.tcl 用例)驱动 redis-server 与 redis-cli,以 RESP 协议执行命令并校验期望输出。测试通过直接调用 runtest.tcl 运行,支持按模块与标签筛选、并行执行、数据目录隔离等特性,确保结果可复现与对实现细节的低耦合。
Engula 兼容性验证思路:
- 选取与数据结构(String、Hash、List、Set、Sorted Set、Stream、Bitmap、HyperLogLog、Geo)相关的 Tcl 用例集,使用原生测试驱动脚本
runtest.tcl 在客户端侧发起测试,然后比较测试用例的期望输出与 Engula 的实际响应是否一致。
- 对依赖 Redis 内部内存布局或调试接口(debug/内部表征)的测试进行剔除,不改变面向用户应用的兼容性。
Tcl 文件列表:
- unit/scan
- unit/type/string
- unit/type/incr
- unit/type/list
- unit/type/list-2
- unit/type/list-3
- unit/type/set
- unit/type/zset
- unit/type/hash
- unit/type/stream
- unit/type/stream-cgroups
- unit/sort
- unit/expire
- unit/pubsub
- unit/pubsubshard
- unit/bitops
- unit/bitfield
- unit/geo
- unit/hyperloglog
更细粒度的测试项可参见 Engula CompatQuick 生成的 output.log(包含每条用例的执行详情):

3. 快速兼容性自测(Engula CompatQuick)
3.1 下载测试工具
- Docker 镜像:
registry.cn-guangzhou.aliyuncs.com/montplex/engula-compat-quick
3.2 环境要求
Engula CompatQuick 以 Docker 镜像形式提供,可在已安装 Docker 的 Linux 或 macOS 上运行。推荐环境如下:
- CentOS 版本 ≥ 7.9
- Ubuntu 版本 ≥ 18.04
- 推荐使用 Docker 官方版本(安装指南,部分网络可能需 VPN)
3.3 运行 Engula CompatQuick
1docker pull registry.cn-guangzhou.aliyuncs.com/montplex/engula-compat-quick
2
3# 在任意文件夹内
4mkdir tmp_test && cd tmp_test
5touch output.log
6touch summary.html
7
8docker run --user $(id -u):$(id -g) -it --rm \
9 -v $(pwd)/output.log:/montplex/output.log \
10 -v $(pwd)/summary.html:/montplex/summary.html \
11 registry.cn-guangzhou.aliyuncs.com/montplex/engula-compat-quick
运行界面示意:

3.4 查看运行结果
运行结束后会生成 summary.html 文件,可通过浏览器打开查看结果。

报告包含:
4. FAQ
是否是数据结构的全部 case?是否有删减?
有删减。部分 debug 类型的测试 case 依赖 Redis 原有的内部数据结构进行测试。由于 Engula 的存储格式与 Redis 不一样,这些 case 已经转变为 Engula 内存存储的格式。此类 case 通常不会影响 Redis 的使用,不影响 Redis 的兼容性。