Redis性能基准测试

基准环境

  • 机器:AWS EC2 c4.8xlarge(同机部署 Redis Server 与 ReJSONBenchmark 工具,通过网络栈连接)
  • 测试工具:ReJSONBenchmark(Go 实现、可配置并发)
  • 模式:非管线(non-pipelined)
  • 版本:RedisJSON Preview(尚未完全优化)

基线对比:PING

工具 并发 吞吐 (req/s) 平均延迟 (ms) 99% 延迟 (ms)
redis-benchmark 50 140,587 ≤1 ≤1
ReJSONBenchmark 16 116,292 0.14 0.21

洞察:Go 测试工具在 PING 下吞吐略低于 redis-cli,但延迟依旧亚毫秒级。

JSON 操作性能

测试场景 操作 吞吐 (req/s) 平均延迟 (ms)
空字符串(2B) JSON.SET / JSON.GET 80,277 / 92,191 0.20 / 0.17
小对象(380B, pass-100.json) SET 根 / GET 根 41,513 / 48,374 0.38 / 0.33
GET 标量路径 94,801 0.17
GET 子文档 81,634 0.19
中等数组(1.4 KB) SET 根 / GET 根 16,117 / 15,194 0.99 / 1.05
GET 元素 / 子字段 78K--99K ~0.20
大对象(3.5 KB) SET 根 / GET 根 14,239 / 8,366 1.12 / 1.91
超大文档(18 KB / 40 KB) SET 根 / GET 根 (18 KB) 3,394 / 891 4.71 / 17.92
SET 根 / GET 根 (40 KB) 1,625 / 443 9.84 / 36.08
数值运算 NUMINCRBY / NUMMULTBY 78,640 / 77,171 ~0.20

结论

  • 文档越小,吞吐越高、延迟越低;
  • 部分路径操作(标量、子文档)性能远超访问整个根文档;
  • 数值原子操作也能保持 >77K req/s 的高吞吐。

与 Server-Side Lua 脚本对比

  • 根级 SET/GET:RedisJSON、Lua(cjson/cmsgpack) 性能相近(80--90K req/s)。

  • 路径级 SET/GET

    • RedisJSON:直接内存访问,无需整体解码,保持 >75K req/s 且延迟稳定;
    • Lua:每次都解码整个对象,随着文档增大性能急剧下降(大文档时 <20K req/s)。

洞察:RedisJSON 原生命令在局部更新/读取场景下,解码与操作开销大幅低于基于脚本的实现。

小结

  1. 极低延迟:空字符串与小对象下,延迟普遍 <0.2 ms。
  2. 高吞吐量:简单路径查询可达 ~100K req/s;数值运算也能维持 >75K req/s。
  3. 可扩展性:文档体量增大时,根级操作延迟线性上升,但仍可满足毫秒级需求;部分路径访问保持亚毫秒稳定。
  4. 优于脚本:相比 Lua 全文解码,RedisJSON 的"就近解码"带来显著性能与资源优势。

通过本次基准,我们可以清晰看到 RedisJSON 在不同载荷与操作模式下的性能特性,为生产环境评估提供了可靠参考。

相关推荐
千月落7 分钟前
Redis数据迁移
数据库·redis·缓存
wangbing11251 小时前
MySQL 官方 GPG 密钥过期问题
数据库·mysql
PaperData1 小时前
2000-2023年地级市数字基础设施评价指标体系
大数据·网络·数据库·人工智能·数据分析·经管
重生之我是Java开发战士1 小时前
【MySQL】事务 & 用户与权限管理
android·数据库·mysql
琢磨先生David2 小时前
电信行业数据库开发的一些经验
数据库·数据库开发
key_3_feng2 小时前
数据库Skill开发教程:从零构建SQLite应用
数据库·sqlite·skill
2301_812539672 小时前
Golang怎么实现网页爬虫抓取数据_Golang如何用colly框架快速构建爬虫采集程序【教程】
jvm·数据库·python
雪碧聊技术2 小时前
组合查询(union)
数据库·sql
杨云龙UP2 小时前
ODA运维实战:Oracle 19c YJXT PDB表空间在线扩容全过程_20260503
linux·运维·服务器·数据库·oracle
BENA ceic2 小时前
Spring 的三种注入方式?
java·数据库·spring