Redis 框架 jedis 与 lettuce 比较

【需求背景】

由于集群模式下 Spring 对 jedis 的封装,在使用批量方法 (mget、delete) 时会把任务都提交到仅有一个核心线程的 executor 中执行,在高并发场景下会造成应用内大量任务处于排队状态而得不到执行。

具体参考:https://juejin.cn/post/6844904115445694472

【 jedis 和 lettuce 的区别】

  • lettuce 底层使用了 pipeline 实现了批量命令的功能,解决 mget 的问题。具体查看类:io.lettuce.core.cluster.api.async.RedisAdvancedClusterAsyncCommands

  • jedis 使用了线程池来解决 mget 的问题,具体查看类:org.springframework.data.redis.connection.jedis.JedisClusterStringCommands

综合性能对比,肯定是使用 pipeline 更加高效,这是原生 Redis 支持的功能。

【实践】

修改 nacos 的配置:spring.redis.client.type=lettuce 即可实现。

sls 查看启用哪个实例:LettuceRedisConfiguration 或 JedisConnectionFactory

【性能分析】

1、压测机器

serviceA 1台

serviceB 1台

其他依赖:全部依赖于生产环境的实例

2、压测接口

查询单个用户购物车,购物车数量很大的情况。

3、压测结果
在这里插入图片描述

4、压测分析

  • 对于单个 get 请求来说,对比第4个和第5个用例,对比第7个和第8个用例,jedis 性能与 lettuce 框架性能相当,差别不大。

  • 对于 mget 批量请求来说,对比第1个和第3个用例,lettuce 性能明显好于 jedis 框架。

  • 对于 lettuce 框架来说,对比第2个和第6个用例来说,默认策略 shareNativeConnection=true 要明显好于 shareNativeConnection=false,因此保留默认配置。

5、最终结论

如果要使用 mget 批量命令的话,建议使用 lettuce 框架,并且保留默认配置:shareNativeConnection=true。

如果不使用批量命令,lettuce 框架和 jedis 框架性能相当。

综上所述,还是 lettuce 框架性能更优。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值