Tencent Distributed Cache(Redis互換)は、Redisプロトコルと完全な互換性を持ち、コミュニティ版のほとんどのネイティブコマンドをサポートしています。本記事では、各コマンドファミリーのサポート状況、クラスタアーキテクチャでの使用上の差異、およびValkey版専用モジュールコマンドをグローバルな視点でまとめ、必要なコマンドの互換性情報をすばやく特定できるようにします。
コマンドファミリーインデックス
以下の表に、製品がサポートするすべてのコマンドファミリーを示します。必要に応じて、対応する詳細ドキュメントに移動し、具体的なコマンドのバージョンサポート状況を確認できます。
|
Strings | 文字列の格納・取得とビット操作 | 全バージョン | |
Hash | キーと値のペア集合の操作 | 全バージョン | |
List | 双方向リンクリスト操作 | 全バージョン | |
Sets | 順序なし集合操作 | 全バージョン | |
Sorted Sets | 順序付き集合操作 | 全バージョン | |
Keys | キーの汎用管理操作 | 全バージョン | |
Bitmap | ビット配列操作 | 全バージョン | |
HyperLogLog | 基数統計 | 全バージョン | |
Geo | 地理的位置操作 | Redis 4.0+ | |
Stream | メッセージストリーム操作 | Redis 5.0+ | |
Pub/Sub | パブリッシュ/サブスクライブメッセージ | 全バージョン | |
Scripting | Luaスクリプト実行 | 全バージョン | |
Transactions | トランザクション操作 | 全バージョン | |
Server | サーバー管理コマンド | 全バージョン | |
Connection | 接続管理コマンド | 全バージョン | |
Cluster | クラスタ管理コマンド | Redis 4.0+(クラスタアーキテクチャ) | |
クラスタアーキテクチャコマンド使用説明
クラスタアーキテクチャはProxyプロキシレイヤーを通じて、標準アーキテクチャと同様の使用体験を外部に提供します。ただし、基盤データがSlotに基づいて複数のシャードノードに分散しているため、一部のコマンドの動作は標準アーキテクチャと異なります。
クロススロットコマンド
クラスタアーキテクチャでは、データはKeyのCRC16値に基づいて16384個のSlotに分散されます。複数のKeyに関連するコマンドは、クロスSlotのサポート状況に応じて2種類に分類されます:
|
クロススロット対応 | Proxy層が自動的にリクエストを分割して結果を集約するため、業務は無意識です。 | MGET、MSET、DEL |
クロススロット非対応 | 操作対象の複数のKeyは同一Slotに配置する必要があります。そうでない場合、エラーが返されます。Hash Tagを使用することで回避できます。 | RENAME、MSETNX、SDIFF、SUNION、SINTER、ZINTERSTORE など |
説明:
クロスSlotをサポートしないコマンドについては、Hash Tag(Key内の{tag}部分が同じKeyを同一のSlotにルーティングする)を使用して制限を回避できます。例えば、{user}.nameと{user}.ageは同一のSlotに割り当てられます。
カスタムコマンド
クラスタアーキテクチャでは、INFO、SLOWLOG、SCAN、KEYS、PING、FLUSHDBなどのコマンドはデフォルトでProxy層で実行されるか、ランダムにいずれかのシャードにルーティングされます。特定のシャードノードで実行する必要がある場合は、コマンドの末尾にノードIDパラメータを追加できます:
COMMAND arg1 arg2 ... [ノードID]
ノードIDは、コンソールのノード管理ページで確認できます。または、CLUSTER NODESコマンドで取得できます。 説明:
Proxyプロキシバージョン5.5.0以降では、カスタムコマンドにノードIDパラメータを追加する必要はなくなり、Proxyが自動的にルーティングします。具体的な使用方法については、カスタムコマンドの使用例をご覧ください。 限定サポートコマンド
クラスタアーキテクチャはProxyプロキシレイヤーを通じてサービスを外部に提供し、バックエンドのシャーディングの実際のネットワークトポロジーを隠蔽します。Jedis Cluster、Lettuce Clusterなどのスマートクライアントとの互換性を確保するため、以下のClusterコマンドは正常に実行できますが、返されるノードのIPアドレスは、インスタンスのProxy VIPアドレス(つまり、インスタンスのプライベートIPv4アクセスアドレス)に統一して置き換えられます。詳細については、Redis/Valkey版の限定サポートコマンドの使用例をご覧ください。 |
CLUSTER NODES | 返されるノードIPアドレスはインスタンスのProxy VIPであり、バックエンドシャードの実際のIPではありません。 |
CLUSTER SLOTS | 返されるノードIPアドレスはインスタンスのProxy VIPであり、バックエンドシャードの実際のIPではありません。 |
CLUSTER SHARDS | (7.0+/Valkey 8.0+)で返されるノードIPアドレスはインスタンスのProxy VIPであり、バックエンドシャードの実際のIPではありません。 |
トランザクションサポート
クラスタアーキテクチャはトランザクション(MULTI/EXEC)をサポートしていますが、以下の条件を満たす必要があります:
トランザクションに含まれるすべてのKeyは同一のSlotに存在する必要があります。関連するKeyを同一のSlotにルーティングするために、Hash Tag(例:{user}.nameと{user}.age)を使用することを推奨します。
WATCHコマンドを使用して楽観ロックを実装する場合、監視対象のKeyとトランザクション内で操作するKeyも同一のSlotに存在する必要があります。
マルチDBサポート
クラスタアーキテクチャはマルチDBをサポートしており(SELECTコマンドで切り替え)、合計256個のDB(DB 0 ~ DB 255)を提供します。
サポート対象外コマンド
安全性、アーキテクチャの互換性、または機能制限の理由により、以下のコマンドは製品内での実行がサポートされていません。呼び出した場合、エラーが返されます:
システム管理系:BGREWRITEAOF、BGSAVE、CONFIG、DEBUG、CLUSTER書き込み操作(ADDSLOTS / FAILOVER / RESETなど)
危険操作系:FLUSHALL(標準アーキテクチャで利用可能)、SHUTDOWN、SLAVEOF / REPLICAOF
プロトコル層:HELLO(RESP3プロトコル)
権限制御:ACLシリーズコマンド
モジュール管理:MODULE LOAD / UNLOAD
サポートされていないコマンドの完全なリストについては、コミュニティ版コマンド互換性の各コマンドファミリーの詳細ドキュメントを参照してください。 バージョン差異と注意事項
エンジンバージョン間にはコマンド動作の差異が存在し、主にLuaスクリプトのサンドボックス制限、コマンド戻り値の変更などに関連します。バージョンアップグレードを実施する前に、ターゲットバージョンの変更内容を十分に理解し、業務への影響を回避することを推奨します。詳細については、メジャーバージョン間のコマンド使用差異を参照してください。 関連ドキュメント
|
| 各コマンドファミリーのバージョンおよびアーキテクチャ別のコマンド単位サポート状況 |
| Redis 5.0 → 6.2 → 7.0 / Valkey 8.0+ バージョン間のコマンド動作の変更 |
| CLUSTER NODES / CLUSTER SLOTS など、限定的にサポートされるコマンドの使用方法 |
| INFO、SLOWLOG、SCAN などのコマンドのクラスタアーキテクチャにおけるカスタム使用方法 |
| DMCデータベース管理ツールで実行可能なコマンド |
| Proxyモードとダイレクト接続モードのコマンドサポートにおける差異 |