# Redis Java Client 當一個專案發展到中後期,資料量越來越大導致資料庫存取效能下降時,通常都會選擇使用快取以減輕資料庫的負擔,而Redis 就是最熱門的選項。 Redis (Remote Dictionary Server),它是由`ANSI C`編寫而成的開源軟體(BSD 協議),與一般資料庫不同,它是將資料以key-value 的形式儲存在記憶體當中,常用於資料庫、**快取**、訊息佇列、串流引擎等功能。 而我們應用程式要使用Redis 強大的功能,則需要透過Redis Client 來負責與Redis 交互,在Java 中常用的Redis Client 有以下三種: 1. Jedis 2. Lettuce 3. Redisson --- ## 基本介紹 ### Jedis Jedis 是最基本的Redis 客戶端,提供的API比較**直覺**和**簡單**,整個依賴也比較輕量,在Spring Boot 1.x 都是默認使用Jedis。 它的缺點也很明顯,Jedis 的IO 模型採用**BIO**,在高併發的情境下處理效率與另外兩者相比遜色不少,而且它並**不是線程安全**的,需要透過連線池來操作。 ### Lettuce 在[官方的介紹](https://github.com/lettuce-io/lettuce-core)中,Lettuce 是**可擴展且線性安全**的Redis Clien,適用於同步、非同步和響應式的應用場景,底層是基於Netty 並且支援叢集、哨兵等模式,在Spring Boot 2.x 之後便默認使用Lettuce。 ### Redisson Redisson 與Lettuce 類似,是**線性安全且支援異步**,底層也同樣基於Netty 框架,並且支援叢集、哨兵等模式。 它額外提供了記憶體資料網格(In-Memory Data Grid)的功能,**支援Redis 各種的分散式物件和服務**,如分散式鎖、分散式集合等,但它**對字串符的操作支援較差**。 --- ## 結論 在性能表現上,**Jedis 都是遜於Lettuce 和Redisson**,但Lettuce 和Redisson 哪個表現更好並沒有一個定論,畢竟雖然都是基於Netty 且支援非同步,但它們各自關注的問題並不一樣,應該還是依照使用情境區分。 不過,在撰寫本篇文章的當下,還沒有完整使用過上述三個Redis 客戶端的功能,但以目前搜集的資訊來看,還是可以稍微區分一下它們的應用場景: - Jedis:簡單、輕量級、非高併發場景,基本上就是開發初期,可以先快速建立一個POC 展示功能。 - Lettuce:高併發場景,利用Lettuce 非同步的特性,可以很好的管理和處理大量併發的Redis 請求,並且提供優異的效能。 - Redisson:分散式系統,Redisson 是專注於處理分散式事務的Library,提供很多分散式相關的操作服務。 事情還沒有結束,那如果是高併發+分散式系統呢? 根據網路上的說法,推薦使用Lettuce+Redisson,按照業務內容區分Lettuce 處理高併發請求、Redisson 處理分散式事務,但記得要綜合考量系統需求、資源管理、性能優化等方面,確保能夠合理的處理高併發請求並實現分布式資料管理。 --- ## 參考資料 [Jedis Github](https://github.com/redis/jedis) [Lettuce Github](https://github.com/lettuce-io/lettuce-core) [Redisson Github](https://github.com/redisson/redisson) [分布式场景Redis客户端最优解决方案-lettuce + Redisson](https://www.jianshu.com/p/786debcbbe8d)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.