1. 前言
Spring Boot 2.0中 Redis 客戶端驅動現在由 Jedis變為了 Lettuce,這是隨意的根據喜好的決定,還是有技術上的原因呢?
Lettuce 的確有很多優秀的特性,例如:
基於 netty,支持事件模型
支持 同步、異步、響應式 的方式
可以方便的連接 Redis Sentinel
完全支持 Redis Cluster
SSL 連接
Streaming API
CDI 和 Spring 的集成
兼容 Java 8 和 9
2. 重要特性
(1)多線程共享
Jedis 是直連模式,在多個線程間共享一個 Jedis 實例時是線程不安全的,如果想要在多線程環境下使用 Jedis,需要使用連接池,每個線程都去拿自己的 Jedis 實例,當連接數量增多時,物理連接成本就較高了。
Lettuce 是基於 netty 的,連接實例可以在多個線程間共享,所以,一個多線程的應用可以使用一個連接實例,而不用擔心併發線程的數量。
(2)異步
異步的方式可以讓我們更好的利用系統資源,而不用浪費線程等待網絡或磁盤I/O。
Lettuce 是基於 netty 的,netty 是一個多線程、事件驅動的 I/O 框架,所以 Lettuce 可以幫助我們充分利用異步的優勢。
代碼示例
連接
使用阻塞的方式讀取
設置阻塞讀取時的超時時間
異步方式,當
RedisFuture
是完成狀態時自動觸發後面的動作
(3)很好的支持 Redis Cluster
對 Cluster 的支持包括:
支持所有的 Cluster 命令
基於哈希槽的命令路由
對 cluster 命令的高層抽象
在多節點上執行命令
根據槽和地址端口直接連接cluster中的節點
SSL和認證
cluster 拓撲的更新
發佈/訂閱
(4)Streaming API
Redis 中可能會有海量的數據,當你獲取一個大的數據集合時,有可能會被撐爆,Lettuce 可以讓我們使用流的方式來處理。
示例1
示例2
3. 小結
Lettuce 值得我們深入學習一下,官方文檔
https://github.com/lettuce-io/lettuce-core/wiki
閱讀更多 性能與架構 的文章