jedis VS lettuce
- jedis客户端连接方式是基于tcp的阻塞式连接方式。
- lettuce客户端连接方式是基于netty的
多路复用
异步非阻塞的连接方案。
Lettuce 连接设计的时候,就是线程安全的,所以一个连接可以被多个线程共享,同时 lettuce 连接默认是自动重连的,使用单连接基本可以满足业务需求,大多数情况下不需要配置连接池,多连接并不会给操作带来性能上的提升。
所有场景:
jedis表现的吞吐量优于lettuce连接方案。
lettuce表现的响应时间和稳定性优于jedis连接方案。
结论2: 通过增大并发量
jedis吞吐量增大,超时错误开始出现,最大响应时间增大。
原因分析:连接数达到最大值,出现连接超时拒绝,连接等待出现 。所以最大耗时增加。
lettuce表现都是毫秒级别,但是平均耗时和最大耗时开始增加。
原因分析:lettuce采用多路复用原理,因此真正工作的连接受制于CPU核数因此增大连接数反而增加了线程上下文切换时间。因此建议调整为 CPU核实+1.
结论3:通过调大线程池数量
jedis吞吐量增大,超时错误开始出现,最大响应时间增大。
原因分析:连接数达到最大值,出现连接超时拒绝,连接等待出现 。所以最大耗时增加。
lettuce表现都是毫秒级别,但是平均耗时和最大耗时开始增加。
原因分析:lettuce采用多路复用原理,因此真正工作的连接受制于CPU核数因此增大连接数反而增加了线程上下文切换时间。因此建议调整为 CPU核数+1.
最终结论:
调大连接池大小能够提高jedis的吞吐量,但是不能避免出现超时错误和长时间等待。
jedis连接方式最大连接数和最小、最大空闲连接数设置为一样有利于减少上下文切换时间,提升效率。
letturce调大连接池大小反而会影响性能,最佳个数= CPU核数+1.
letturce整体稳定性和性能由于jedis方式。