KeeWiDB 和 Redis 都兼容 Redis 协议,但底层架构不同。Redis 将全部数据存储在内存中,而 KeeWiDB 以磁盘为主存储介质,仅将热数据缓存在内存中。这一架构差异使它们在性能特征、适用场景和成本结构上有所不同。本文档说明 KeeWiDB 的产品定位和性能边界,供开发者在选型阶段参考。
产品定位
KeeWiDB 是一款兼容 Redis 协议的磁盘型数据库。 架构设计上,全量数据持久化于磁盘,并同步在内存中维护热数据缓存以加速高频访问。冷热分层模式有效降低了大容量存储场景下的单 GB 成本,但也带来了性能曲线的阶梯式差异:请求命中内存时维持微秒级响应;一旦回落磁盘读取,执行耗时则上升至毫秒级。对于涉及大量元素遍历的复杂命令,受磁盘 I/O 累加影响,延迟现象将进一步放大。
KeeWiDB 与 Redis 的定位差异
选型时需充分评估磁盘 IO 对请求时延的影响,避免将 KeeWiDB 用于对时延稳定性要求极高的场景。两者的性能差异源于单个操作耗时的量级不同,对于一条涉及 N 个元素的命令,总耗时可按以下模型估算:
请求耗时 = 网络耗时 + 单个操作耗时 × N
在 Redis 中,单个操作在内存中完成,耗时为微秒级;而在 KeeWiDB 中,单个操作可能触发磁盘读取,耗时上升到毫秒级。当 N 较小时,两者差异不大;但当 N 增大到数百甚至数千时,KeeWiDB 的总耗时呈线性放大,高于 Redis。
数据库 | 网络耗时 | 单个操作耗时 | O(N) 命令总体时延 |
Redis | 毫秒级 | 微秒级(内存访问) | 毫秒级,N 增大后仍可控 |
KeeWiDB | 毫秒级 | 毫秒级(可能涉及磁盘 IO) | 百毫秒级甚至秒级,随 N 线性增长 |
根据上述差异,可结合业务特征选择合适的产品:
推荐产品 | 适用场景特征 | 典型业务示例 |
KeeWiDB | 数据量大(TB 级)、成本敏感、以简单读写为主、可接受毫秒级时延波动、数据需长期存储 | 保单归档查询:历史保单2TB+,日均查询量低,按保单号单条读取,存储成本优势明显 |
| | 操作日志存储:日志5TB+,保留180天,以写入和范围查询为主,成本敏感 |
Redis | 数据量适中、对时延稳定性要求严格(如 P99 < 1ms)、存在大量复杂命令、数据频繁过期更新 | 实时风控决策:每笔交易需在5ms内完成风险画像查询和规则匹配,不能接受磁盘 IO 时延波动 |
| | 用户会话缓存:数据量50GB,会话30分钟过期,需高频读写,Redis 内存淘汰效率远高于磁盘扫描 |
二、架构差异对比(存储版 vs 极速版 vs Redis)
KeeWiDB 提供存储版和极速版两种架构,与 Redis 在内部实现上存在差异。以下对比供选型和性能调优时参考。
2.1 功能与效率对比
用法 | KeeWiDB 存储版 | KeeWiDB 极速版(已售罄) | Redis |
SUBSCRIBE / PSUBSCRIBE | 效率中。 Proxy 对每个分片仅建立1个连接,但仍受整体架构影响。 | 效率低。 分片内部再拆分为多个子分片,Proxy 需对每个分片建立 N 个连接,连接开销大、消息分发延迟高。 | 效率高。 Proxy 对每个分片仅建立1个连接,消息在内存中分发。 |
EVAL(Lua) | 效率中。 每个工作线程各自维护一个 Lua 虚拟机实例。 | 效率低。 每个客户端连接独立维护一个 Lua 虚拟机,连接数越多,创建和销毁 Lua 虚拟机代价越大。 | 效率高。 全局仅一个 Lua 虚拟机,无需频繁创建和销毁 Lua 虚拟机。 |
Pipeline | 效率低。 命令命中冷数据时需回落磁盘 IO 逐条处理,耗时累加导致整批请求延迟升高,易引发 Proxy 与后端节点的请求积压。 | 同存储版。 | 效率高。 全部数据在内存中,管道内命令连续执行,单次往返即完成批量操作。 |
过期淘汰 | 效率低。 清理过期数据需遍历磁盘,IO 开销高于内存扫描,大量 Key 集中过期时可能引发 IO 毛刺。 | 同存储版。 | 效率高。 过期扫描与数据清理全部在内存中完成,耗时稳定可控。 |
2.2 功能支持差异
以下为三个版本在关键特性上的支持情况。选型时需确认业务是否依赖多 DB 或事务功能:
特性 | KeeWiDB 存储版 | KeeWiDB 极速版 | Redis |
数据存储介质 | 磁盘 + 内存(热数据缓存) | 磁盘 + 内存(热数据缓存) | 纯内存(可选 RDB/AOF 持久化) |
多 DB 支持 | 仅支持 DB 0,不支持 SELECT 切换 | 仅支持 DB 0,不支持 SELECT 切换 | 支持多 DB(默认16个) |
事务支持 | 不支持(可用 Lua 脚本实现单节点原子操作) | 不支持(可用 Lua 脚本实现单节点原子操作) | 支持 MULTI/EXEC 事务 |