開源專案
redis/lettuce avatar
redis/lettuce

Lettuce:在共享連接上提供同步、异步與响應式 Redis API

高級 Java Redis 用戶端,用於線程安全同步、非同步和反應式使用。支援叢集、哨兵、管道和編解碼器。

5,779 個 Star1,103 個 ForkJavaMIT

秒懂

它是什麼?
這個 Java 客户端基于 Netty,支持線程安全使用、Sentinel、Cluster、pipelining、codec 與 Redis 模块。
適合誰用?
适合 Java 應用需要同步、Future 或响應式 Redis 调用,并要連接 Sentinel、Cluster、SSL 或 Unix Domain Socket 的团队;不适合无视阻塞命令、事務操作和連接生命周期的共享連接方案。先用 Maven 锁定 `lettuce-core` 版本,运行 README 的 get/set、异步 Future 與 Mono 示例,再用真實 Redis 拓扑驗證重連、TLS 和關闭流程。
可以商用嗎?
可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 2 天前。
用什麼語言寫的?
主要是 Java(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月14日)與我們的分析,不構成法律意見。

開源專案深度解析

一個連接同时提供三种 API · redis-lettuce-deep-analysis

Lettuce 是一個用 Java 编寫的 Redis 客户端,能够從同一個連接上提供同步、异步和响應式三种命令接口。README 说明,多個線程可以共享一個連接,前提是避免阻塞操作和事務操作,比如 BLPOP 和 MULTI/EXEC。客户端基于 Netty 構建,倉庫称這個版本已经针对最新的 Redis 源码構建進行過測試。因此,同一個連接对象可以同时服務于简单的 get/set 调用、基于 Future 的调用,以及响應式流调用。

命令方法如何命名 · redis-lettuce-deep-analysis

Lettuce 没有為每條 Redis 命令单独設计一套 API,而是把命令直接映射成 Java 方法名。README 说,每條 Redis 命令由一個或多個方法實現,方法名與全小寫的 Redis 命令名相同。当命令带有会改變結果類型的修饰符时,方法名会加上驼峰式修饰符,给出的例子是 zrangebyscore 表示基本形式,zrangebyscoreWithScores 表示返回分數的變體。這個命名規则寫在 Basic usage 一节中,并附有指向参考文档的链接。

README 中的异步和响應式示例 · redis-lettuce-deep-analysis

README 為两种 API 都提供了简短代码示例。异步示例中,connection.async() 返回 RedisStringAsyncCommands 对象,async.set("key", "value") 這样的调用会產生 RedisFuture。示例用 LettuceFutures.awaitAll(set, get) 同时等待两個 Future,然後把結果與 "OK" 和 "value" 比较。响應式示例使用 connection.reactive() 得到 RedisStringReactiveCommands,把 set 和 get 调用包進 Mono,订阅 set 操作,并对 get 调用 block()。示例只展示用法,不包含錯誤处理或連接生命周期管理。

Redis 拓扑與連接选項 · redis-lettuce-deep-analysis

除了单個 Redis 服務器之外,Lettuce 还声明支持 Redis Sentinel、Redis Cluster、SSL 連接和 Unix Domain Socket 連接。README 还列出 Streaming API、用于 UTF-8/bit/JSON 等數據表示的 codec、多种命令接口、原生传輸,以及與 RediSearch、RedisJSON 和 Redis Vector Sets 的集成。它把客户端描述為兼容 Java 8 及更高版本,带有隐式自動模块但没有模块描述符。這些功能的具體语义在 README 中没有展開,而是指向参考文档。

添加依赖和從源码構建 · redis-lettuce-deep-analysis

發布版本会放在 Maven Central,README 给出的 Maven 依赖是 groupId 為 io.lettuce、artifactId 為 lettuce-core、版本号寫成 示例中的版本字段。快照版本来自 Sonatype snapshot 倉庫,版本字符串以 BUILD-SNAPSHOT 結尾。構建 Lettuce 需要 Apache Maven,測試需要多個正在运行的 Redis 實例;Makefile 中记錄了 make start、make test、make stop 和 make clean 這些目標,測試默认针对 Redis latest。README 没有明确给出 Gradle 或 Ivy 的坐標,但说可以在 search.maven.org 找到這些工具的二進制和依赖信息。

倉庫来源與許可範围 · redis-lettuce-deep-analysis

這個倉庫是 github.com/wg/lettuce 的一個分支,以 MIT 許可證發布,版權归 Redis Ltd.,從 2023 年開始。許可證允許使用、复制、修改、合并、發布、分發、再許可和销售軟件副本,并要求在實质性部分中包含版權声明。軟件按現状提供,不附带任何形式的担保。README 本身不包含性能基准、可用性保證或安全声明,并引导用户到 GitHub Issues 提交 bug 和问题。這些限制不是对項目质量的判断,只是说明這些内容没有出現在源材料中。

Lettuce的共享連接規则是部署时必须先驗證的约束。README允許多個線程共享一個連接,但明确排除 BLPOP 以及 MULTI/EXEC 這類阻塞或事務操作。同步、异步和响應式接口虽然都從 StatefulRedisConnection取得,却不意味着三种调用可以无條件混用。异步示例用 RedisFuture 和 LettuceFutures.awaitAll 等待結果,响應式示例用 Mono 并调用 subscribe() 與 block(),它们只说明接口形状,没有覆盖超时、异常传播、背压或關闭連接。因此服務接入时應分别驗證連接池策略、線程模型和應用關闭时的释放動作。

如果业務需要 Redis Sentinel、Cluster、SSL、Unix Domain Socket、Streaming API 或 RediSearch、RedisJSON、Redis Vector Sets,Lettuce提供的是客户端接口,拓扑發現、證书、命令版本和服務端權限仍由 Redis 環境决定。與同步阻塞客户端相比,它的异步和响應式入口更适合已有 Netty 或 Reactor 链路;只做少量脚本调用的程序可能无需引入這些接口。源码測試要求多個 Redis 實例,Makefile提供 make start、make test、make stop 和 make clean,且測試默认使用 latest。升級到 7.7.0.RELEASE 时,先用目標 Redis 版本复現基本 get/set、事務禁用規则和 Cluster 連接,再检查應用日志中的超时與重連。

Lettuce的自動重連、拓扑連接和 SSL 都属于客户端與服務端共同决定的行為。README列出這些能力,却没有在摘要中给出重連退避、證书轮换或 Cluster 拓扑變化的默认值。接入前應对主节点切换、連接中断和命令超时寫出可观察的日志断言,并区分业務重試和 Redis 命令重复执行的风险。

Lettuce兼容 Java 8 及更高版本,但README只给出兼容声明,没有為每個 Redis 服務版本列出命令差异。新數據類型和扩展命令的可用性要看服務端版本以及客户端 API。測試时應覆盖基本字符串、Pub/Sub、Cluster 和 Sentinel 中真正使用的命令,并检查响應式调用是否在應用的 Reactor 生命周期内完成。事務和阻塞命令不能因為連接是線程安全的就共享执行。

Pub/Sub也需要单独的連接语义。README通過 connectPubSub().sync() 獲得 RedisPubSubCommands,再註册 RedisPubSubListener 并订阅 channel;這個示例没有覆盖断線後的重新订阅、消息重复或消费确认。需要可靠消息处理的服務不能從普通 get/set 示例推导出這些保證。

Lettuce的發布坐標是 io.lettuce:lettuce-core,README给出的 Maven 片段使用 x.y.z 作為未填寫的版本字段,具體版本應從 Maven Central 或 GitHub Releases 选择。快照依赖还要求声明 Sonatype snapshots 倉庫。不要让生產構建漂移到 BUILD-SNAPSHOT;源码測試使用 Redis latest,也不能直接等同于應用線上使用的 Redis 版本。

MIT許可證允許按其條款使用和分發,但README没有提供性能或可用性保證。

先驗證連接生命周期和失败重試,再决定同步、异步或响應式接口是否适合该服務的線程模型。

对客户端升級,最小检查集應覆盖連接建立、基本命令、订阅、断線重連和應用關闭。同步调用要看線程阻塞,RedisFuture要看异常和等待,Mono要看订阅與取消。README提供的是 API 片段,不是這些运行保證。Lettuce是否合适,取决于服務是否确實需要它列出的拓扑和异步接口。

第1項核驗針對 Lettuce:在共享連接上提供同步、异步與响應式 Redis API 的文件邊界:把 README 中的安裝入口、命令、設定鍵與輸出格式對應到實際執行結果。針對 redis-lettuce-deep-analysis,應保留原始輸入、執行環境、終端輸出、錯誤路徑和產生檔案;若流程依賴網路、模型、資料庫或作業系統權限,還要記下依賴失效時的具體反應。這些紀錄能分辨是輸入格式不符、設定未載入、外部服務失敗,還是專案本身的處理限制。

編輯結論

适合 Java 應用需要同步、Future 或响應式 Redis 调用,并要連接 Sentinel、Cluster、SSL 或 Unix Domain Socket 的团队;不适合无视阻塞命令、事務操作和連接生命周期的共享連接方案。先用 Maven 锁定 `lettuce-core` 版本,运行 README 的 get/set、异步 Future 與 Mono 示例,再用真實 Redis 拓扑驗證重連、TLS 和關闭流程。

官方來源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社群筆記

社群筆記