05.08 高級的 Redis Java客戶端-Lettuce


高級的 Redis Java客戶端-Lettuce

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 可以幫助我們充分利用異步的優勢。

代碼示例

連接

高級的 Redis Java客戶端-Lettuce

使用阻塞的方式讀取

高級的 Redis Java客戶端-Lettuce

設置阻塞讀取時的超時時間

異步方式,當

RedisFuture

是完成狀態時自動觸發後面的動作

(3)很好的支持 Redis Cluster

對 Cluster 的支持包括:

  • 支持所有的 Cluster 命令

  • 基於哈希槽的命令路由

  • 對 cluster 命令的高層抽象

  • 在多節點上執行命令

  • 根據槽和地址端口直接連接cluster中的節點

  • SSL和認證

  • cluster 拓撲的更新

  • 發佈/訂閱

(4)Streaming API

Redis 中可能會有海量的數據,當你獲取一個大的數據集合時,有可能會被撐爆,Lettuce 可以讓我們使用流的方式來處理。

示例1

高級的 Redis Java客戶端-Lettuce

示例2

高級的 Redis Java客戶端-Lettuce

3. 小結

Lettuce 值得我們深入學習一下,官方文檔

https://github.com/lettuce-io/lettuce-core/wiki


分享到:


相關文章: