問題描述
最近在使用redis-cluster 的時候發現一個新問題,寫入緩存數據的時候特別慢,5000條數據花了30秒左右,而且性能測試時項目一直報錯連接redis超時
2019-12-06 14:45:05.952 INFO 19289 --- [nio-8085-exec-1] : 緩存性能驗證 :5000,put numbers: 2497 ,time test start time: 1575614705952
2019-12-06 14:45:06.207 INFO 19289 --- [nio-8085-exec-1] : Starting without optional epoll library
2019-12-06 14:45:06.211 INFO 19289 --- [nio-8085-exec-1] : Starting without optional kqueue library
2019-12-06 14:45:38.169 INFO 19289 --- [nio-8085-exec-1] : 緩存性能驗證 :5000, put numbers: 2497 ,time test endTime time: 1575614738169總計耗時32217
問題排查
項目是spring-boot 使用的 jedis連接 redis-cluster ,配置文件如下:
redis:
cluster:
nodes:
- 127.0.0.1:6380
- 127.0.0.1:6381
- 127.0.0.1:6382
- 127.0.0.1:6383
- 127.0.0.1:6384
- 127.0.0.1:6385
jedis:
pool:
max-active: 600
max-wait: 2000
max-idle: 500
min-idle: 200
timeout: 3000
password:
通過各種參數修改調整無效果后, 嘗試更換java 的redis-client成 lettuce,
redis:
cluster:
nodes:
- 127.0.0.1:6380
- 127.0.0.1:6381
- 127.0.0.1:6382
- 127.0.0.1:6383
- 127.0.0.1:6384
- 127.0.0.1:6385
lettuce:
pool:
max-active: 600
max-wait: 2000
max-idle: 500
min-idle: 200
timeout: 3000
password:
然后問題就好了 ...... 寫入緩存數據的時間變成了 5000條2秒多,壓力測試時也沒有報錯了,不過根本原因還是沒有查到,以后查到了再補充吧!
擴展
Redis的三個框架:Jedis,Redisson,Lettuce
概念:
Jedis:是Redis的Java實現客戶端,提供了比較全面的Redis命令的支持,
Redisson:實現了分布式和可擴展的Java數據結構。
Lettuce:高級Redis客戶端,用於線程安全同步,異步和響應使用,支持集群,Sentinel,管道和編碼器。
優點:
Jedis:比較全面的提供了Redis的操作特性
Redisson:促使使用者對Redis的關注分離,提供很多分布式相關操作服務,例如,分布式鎖,分布式集合,可通過Redis支持延遲隊列
Lettuce:主要在一些分布式緩存框架上使用比較多
可伸縮:
Jedis:使用阻塞的I/O,且其方法調用都是同步的,程序流需要等到sockets處理完I/O才能執行,不支持異步。Jedis客戶端實例不是線程安全的,所以需要通過連接池來使用Jedis。
Redisson:基於Netty框架的事件驅動的通信層,其方法調用是異步的。Redisson的API是線程安全的,所以可以操作單個Redisson連接來完成各種操作
Lettuce:基於Netty框架的事件驅動的通信層,其方法調用是異步的。Lettuce的API是線程安全的,所以可以操作單個Lettuce連接來完成各種操作