一、簡介
Redis常用客戶端主要有三個:
- Jedis api
- Jedis api 線上網址 : https://tool.oschina.net/uploads/apidocs/jedis-2.1.0/redis/clients/jedis/Jedis.html
- redisson
- redisson 官網地址 : https://redisson.org/
- redisson github地址 : https://github.com/redisson/redisson
- lettuce
- lettuce 官網地址 : https://lettuce.io/
- lettuce github地址 : https://github.com/lettuce-io/lettuce-core
在Spring boot2之後, 對redis連線的支援, 預設就採用了lettuce
二、概念
- Jedis : 是老牌的Redis的Java實現客戶端, 提供了比較全面的Redis命令的支援
- redisson : 實現了分散式和可擴充套件的Java資料結構
- Lettuce : 高階Redis客戶端, 用於執行緒安全同步, 非同步和響應使用, 支援叢集, sentinel, 管道和編碼器
三、優點
- Jedis : 比較全面的提供了Redis的操作特性
- Redisson : 促使使用者對Redis的關注分離, 提供很多分散式相關操作事務, 例如: 分散式鎖, 分散式集合, 可透過Redis支援延遲佇列
- Lettuce : 基於Netty框架的事件驅動的通訊層, 其方法呼叫是非同步的。Lettuce的API是執行緒安全的, 所以可以操作單個Lettuce連線來完成各種操作
四、可伸縮
- Jedis : 使用阻塞的I/O, 並且方法呼叫都是同步的, 程式流需要等到sockets處理完I/O才能執行, 不支援非同步。Jedis客戶端例項不是執行緒安全的, 所以需要透過連線池來使用Jedis
- Redisson : 基於Netty框架的事件驅動的通訊層, 其方法呼叫是非同步的。Redisson的API是執行緒安全的, 所以可以操作單個Redisson連線來完成各種操作
- Lettuce : 基於Netty框架的事件驅動的通訊層, 其方法呼叫是非同步的。Lettuce的API是執行緒安全的, 所以可以操作單個Lettuce連線來完成各種操作。Lettuce能夠支援redis4, 需要java8及以上。Lettuce是基於Netty實現的與Redis進行同步和非同步操作
五、比較
-
Jedis :直接連線Redis Server, 非執行緒安全, 需使用連線池為每個Jedis例項增加物理連線
-
Redisson : 基於Netty連線Redis Server, 執行緒安全, 功能較為簡單, 不支援字串操作, 不支援排序、事務、管道、分割槽等Redis特性。促使使用者對Redis的關注分離,提供很多分散式相關操作事務
-
Lettuce : 基於Netty連線Redis Server, 執行緒安全, 一個連線例項可以滿足多執行緒環境下的併發訪問, 一個連線例項不夠的情況下, 可以按需增加連線例項
六、總結
優先使用Lettuce, 如果需要分散式鎖, 分散式集合等分散式的高階特性, 新增Redisson結合使用, 因為Redisson對字串操作的支援很差