[Redis 客戶端整合] Java 中常用Redis客戶端比較

DavidH發表於2024-11-21

一、簡介

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對字串操作的支援很差

相關文章