tencent cloud

Tencent Cloud Distributed Cache (Redis OSS-Compatible)

バージョン推奨

ダウンロード
フォーカスモード
フォントサイズ
最終更新日: 2026-10-20 19:07:18
AI翻訳
Lettuceは、高性能で非同期ノンブロッキングなRedis Javaクライアントです。Redisのさまざまなデータ構造とコマンドをサポートし、Redis操作のパフォーマンスと応答速度を大幅に向上させることができます。特に高同時実行のシナリオでの使用に適しています。
説明:
Tencent CloudはVPC IPプロキシ層を通じてRedisの基盤アーキテクチャの複雑性(シャーディング/高可用性)を統一的に隠蔽しています。クライアントがTencent Cloud Redisインスタンスにアクセスする際、クラスタやセンチネルモードを設定する必要はなく、単一ノードのRedisに接続するのと同様に、Tencent Cloudが提供する統一エントリ(VPC IP)に直接アクセスします。

Lettuceクライアント設計上の欠陥

Spring Boot 2.x以降、LettuceはJedisに代わりデフォルトのRedisクライアントとなりました。Lettuceのデフォルト設定は標準的なRedisデプロイメントでは動作しますが、Tencent Cloud VIPの透過的な高可用性アーキテクチャとは互換性の隔たりがあります。keepAliveおよびtcpUserTimeoutパラメータを強制的に有効化することで、クライアント接続プールがバックエンドの切り替えに迅速に対応できるようにする必要があります。そうしないと、フェイルオーバー後にクライアントが継続的に利用できなくなります。具体的な情報は以下の表の通りです。
障害タイプ
ビジネスシナリオ
Lettuce バージョン
核心問題
主動切り替え
互換性バージョンのアップグレード、プロキシバージョンのアップグレード、データ移行
Lettuce 6.1.05より前のバージョン
デフォルトではTCP Keepalive(アイドル接続の生存確認)が無効のため、クライアントの接続プールはバックエンドVIPの切り替えを感知できません。古い接続はプール内に保持され続け、サーバー側で切り替えが完了しても、クライアントは無効な接続を使い続けてエラーを発生させます。
受動的切り替え
物理マシンの異常ダウン
Lettuce 6.3.0より前のバージョン
TCP_USER_TIMEOUTパラメータが未設定の場合、ネットワークの瞬断やノードのダウンが発生すると、OSは長時間(デフォルトで30分以上)ハーフオープン接続を維持する可能性があります。クライアントの接続プールはこれらの「ゾンビ接続」をタイムリーに回収できず、継続的なエラーが発生します。

推奨構成プラン(Lettuce 6.3.0+)

プロジェクトのpom.xmlまたはbuild.gradleでLettuceのバージョンが6.3.0以上であることを確認してください。このバージョンから、公式はSocketOptions.KeepAliveOptionsおよびSocketOptions.TcpUserTimeoutOptions専用ビルダーを導入しました。低バージョンでこのコードを使用すると、コンパイルエラーやクラスが見つからない例外が発生します。スタンドアロン接続モード(Standalone)でRedisクライアントを初期化する際は、以下のコードを参照してください:
SocketOptions socketOptions = SocketOptions.builder()
.keepAlive(SocketOptions.KeepAliveOptions.builder()
// 2回のkeepalive間の時間間隔
.idle(Duration.ofSeconds(TCP_KEEPALIVE_TIME))
// 接続がどのくらいアイドル状態になったらkeepaliveを開始するか
.interval(Duration.ofSeconds(TCP_KEEPALIVE_TIME/3))
// keepaliveが数回行われた後に接続を切断します。
.count(3)
// キープアライブ接続を有効にするかどうか
.enable()
.build())
.tcpUserTimeout(SocketOptions.TcpUserTimeoutOptions.builder()
// サーバー側のrstによる長時間のタイムアウト問題を解決します。
.tcpUserTimeout(Duration.ofSeconds(TCP_USER_TIMEOUT))
.enable()
.build())
// tcp接続タイムアウト設定
.connectTimeout(Duration.ofMillis(redisConnectTimeout))
.build();

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック