【Redis】Redis和Codis的MGET性能测试(压测)

本文主要测试对比目前 jedis客户端+codis集群 lettuce客户端+redis集群 的性能对比,主要测试业务最多使用的get和mget命令。

PS:redis集群为redis官方提供但并不支持mget功能,但lettuce客户端在业务层帮助实现了mget功能;codis集群为豌豆荚开发的redis分布式集群,本身支持mget功能,底层实例也是单个redis实例。

压测环境

一、Codis集群

架构:3个分片,每个分片1个master,2个slave

实例:8G内存

版本:3.2.11

机器:物理机三台(32cpu,128g)

配置:常用配置项 持久化关闭

二、Redis集群

架构:3个分片,每个分片1个master,2个slave

实例:8G内存

版本:3.2.11

机器:同机房物理机三台(32cpu,128g)

配置:与codis集群配置项相同

三、接口服务

部署方式:java web服务 单点部署 同时提供jedis+codis与lettuce+redis的接口 

启动参数:java -Duser.timezone=GMT+08 -Xmx4G -Xms4G -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -jar /opt/data/lettuce-test-0.0.1-SNAPSHOT.jar

部署机器:32CPU/128G 同机房物理机

Jedis客户端:使用连接池

Lettuce客户端:非连接池同步/异步命令,以及同步连接池,和异步连接池

wrk机器:2CPU/8G 同机房虚拟机

wrk命令:wrk -t4 -c100 -d30s {url}

压测结果

一、Get命令测试

客户端

QPS

Latency-Avg

Transfer/sec
jedis48724.082.64ms7.72MB
lettuce-sync73503.321.99ms11.65MB
lettuce-async78309.921.42ms12.41MB
lettuce-sync-pool8859.1812.10ms1.40MB
lettuce-async-pool43452.518.86ms6.56MB

二、Mget命令测试

客户端

QPS

Latency-Avg

Transfer/sec
jedis25854.204.20ms79.23MB
lettuce-sync3618.3528.70ms20.26MB
lettuce-async3932.6525.41ms22.02MB
lettuce-sync-pool1967.9250.89ms11.18MB
lettuce-async-pool11764.7713.57ms48.46MB

PS:mget一次获取50个固定元素,用scan命令获取。 

压测结论

  1. Get命令lettce客户端表现优于jedis客户端。
  2. Mget命令jedis客户端表现由于lettuce客户端。
  3. Lettuce的异步命令(async)在压测情况下总体上都比同步命令(sync)表现优秀。

结论分析

如上片博客Lettuce源码分析-MGET原理所述,Lettuce是把key根据slot进行分组,将在同一个slot的命令一起发送到对应的节点,再将所有请求的返回值合并作为最终结果。测试的50个key分属与不同的50个slot势必效率不会很高,因为无法避免50次访问集群,即便使用异步并行访问。而Codis理论上应该类似也会按slot分组执行mget,但是它用管道pipeline对同一shard的key做了优化,效率有明显提升。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值