コマンド/機能 | Redis 5.0 | Redis 6.2 | Redis 7.0/Valkey 8.0+ | 説明 |
RESP3 | - | - | - | 現在、製品は対応していません。業務フレームワークで HELLO 3 auth username password 形式による認証が使用されているかどうかを評価してください。resp3プロトコルを使用している場合は、resp2プロトコルへのダウングレードが必要です。 |
ACL | - | - | - | 現在、製品はACLに対応していません。業務でこの機能に依存しているかどうかを確認してください。この制限は、ACLユーザーに関連するすべてのコマンドインターフェースに影響します。対象には、acl、auth、migrate auth、client kill userなどが含まれます。 |
Module | - | - | - | 現在のバージョンではmoduleに一時的に対応していません。業務で関連機能を有効にしているかどうかを確認してください。 |
client-side-caching | - | - | - | 現在のバージョンでは一時的に対応していません。業務でクライアント側キャッシュ最適化に依存しているかどうかを確認してください。 |
pub/sub | - | - | - | |
クラスタのマルチDB | クラスタはマルチDBに対応しています。 | | | マルチDB機能を使用せず、依存しないことを推奨します。この機能ではselect、swapdbなどのコマンドが開放されています。一部のクライアントはselectの成功可否によってノードがクラスタモードであるかを判断するため、誤判定のリスクがあります。 |
lua readonly table | 非ローカル関数の定義は許可されていません。 | | | コミュニティはCVEセキュリティ脆弱性を修正するため、Luaサンドボックスで読み取り専用テーブル保護を有効にし、グローバル(非local)関数の再定義を禁止しました。これに違反すると、実行時に直接エラーが発生します:ERR Attempt to modify a readonly table ...。すべてのeval、script、functionなどのLua呼び出しを全量スキャンし、すべてのカスタム関数を明示的にlocal定義に変更してください: eval "local function xxx() return 'hello' end" 0説明: この変更はbreaking changeに該当しますが、コミュニティはマイナーバージョンのセキュリティパッチとしてリリースしており、クラウドベンダーやメジャー/マイナーバージョンによって差異が存在する可能性があります(ロールバックまたは未移植)。 古い書き方に依存せず、業務側で必ず規範を自ら保証し、オンライン障害を回避してください。 詳細については、Lua readonly tables (CVE-2022-24736, CVE-2022-24735)を参照してください。 |
lua print | lua printを許可します。 | | lua printは許可されません。 | コミュニティはCVEセキュリティ脆弱性を修正するため、Luaサンドボックス内のprint関数を完全に削除しました(破壊的変更)。引き続き使用すると、直接エラーが発生します: ERR ... nonexistent global variable 'print' ...すべてのeval、scriptなどのLuaスクリプトを全量調査し、すべてのprint(...)呼び出しを削除または置き換えてください。ログを出力する必要がある場合は、公式APIを使用してください: redis.log(redis.LOG_NOTICE, 'hello')。 |
script load | script loadスクリプトはコンパイルされキャッシュに格納されます。同時にこの命令自体(スクリプト内容を含む)は書き込みコマンドとしてすべてのスレーブノードに伝播され、スレーブノードが同じスクリプトキャッシュを持つことを保証します。 AOF永続化が有効になっている場合、SCRIPT LOADはそのままAOFに書き込まれます。形式はクライアントから送信されたコマンドと一致します。 | | | コミュニティ版Redis 7.0では、luaスクリプトの永続化が行われなくなりました。クラウド上の7.0では、luaの永続化が保持されています。 |
script flush | script flushコマンドの実行により、マスタースレーブ間の伝播とAOFファイルへの書き込みが行われます。マスターノードはローカルスクリプトキャッシュをクリアし、このFLUSHコマンドをスレーブノードにも同期して、スレーブノードでも同様にキャッシュをクリアさせ、マスタースレーブ間のスクリプトキャッシュの不整合を防ぎます。 AOF永続化が有効になっている場合、script flushもAOFに書き込まれます。 | | | |
luaスクリプトの永続化 | マスターレプリカレプリケーションのRDBにはluaスクリプトが保存されます。 | | | |
lua evalスクリプトの追い出し | クラウド上のすべてのメジャーバージョンの最新マイナーバージョンは、スクリプトの排除に対応しています。 説明: パラメータをスクリプト本文に埋め込むことによるEVALの濫用を防ぐため、Redisは500エントリのLRU駆逐メカニズムを導入しました:EVALによって生成されたスクリプトのみを淘汰対象とし、上限超過後は最も長く使われていない順に自動的に解放されます。SCRIPT LOADのスクリプトは影響を受けません。 | | | 業務側での変更は不要です。この変更はコミュニティの高バージョン動作を後方移植するものであり、公式最新版と一致します。 注意: 通常のシナリオでは、スクリプトはEVALによって毎回完全に送信されるため、LRUメカニズムによって駆逐されても業務に影響しません。しかし、ユーザーが非通常の方法を採用し、まずEVALでスクリプトをサーバーにロードして自身でSHAを計算し、その後にEVALSHAを使用して呼び出す場合、単一トランザクションで扱うスクリプト数が500を超えると、最も古く最も使用されていないスクリプトが駆逐される可能性があります。その結果、後続のEVALSHAがNOSCRIPTエラーを返し、トランザクションが失敗します。 |
luaメモリ滥用制限 | クラウド上のすべてのメジャーバージョンの最新マイナーバージョンは、luaのメモリ制限に対応しています。 説明: コミュニティ版Luaは書き込みコマンド実行時にmaxmemoryを検証しません。悪意のあるスクリプト(例えば無限ループのSETなど)によって利用される可能性があります。 EVAL "for i=1,10000000000 do redis.call('SET', 'key-:' .. i, 'value-:' .. i) end" 0)によってメモリ上限を回避します。クラウド環境ではマシンのOOMを防ぐため、Lua実行中にリアルタイムで検出し、制限を超えた場合は直ちにOOMエラーを返します。 | | | 通常の業務では特に注意する必要はありません。インスタンスのmaxmemoryが十分であれば問題ありません。クラウド側ではパラメータextra-maxmemoryを提供しており、必要に応じてインスタンスに追加の領域を確保できます。 注意: OOMが発生した場合、Luaスクリプトは途中でエラーを返し、原子性を保証できません。 |
辞書リハッシュの最適化 | クラウド上のすべてのメジャーバージョンの最新マイナーバージョンは、辞書のrehash最適化に対応しています。 説明: コミュニティ版辞書の実装では、アクティブrehashとパッシブrehashを含む漸進的rehashメカニズムが採用されています。パッシブrehashは各ユーザーリクエストの処理中に発生し、そのリクエストは追加で漸進的rehash操作をトリガーします。これにより、リクエストはより多くのメモリアクセスを実行する必要が生じ、リクエスト遅延が増加し、ノードのスループットが低下します。パフォーマンスを最適化するため、クラウド版では辞書のパッシブrehash機能を無効化し、アクティブrehashのみを保持します。 | | | 注意: パッシブrehashを無効化すると、辞書のrehashプロセス速度はやや低下し、辞書内のハッシュ衝突確率がわずかに増加する可能性があります。同時に、辞書がrehash中に使用する一時メモリは、コミュニティ版よりも長い時間監視メトリクスに表示されます。しかし、ユーザーリクエストはrehash中にパッシブrehashによって追加のパフォーマンスジッタが発生することは基本的にありません。これは、ほとんどのアプリケーションシナリオにおけるユーザーエクスペリエンスにとって有利です。ごく一部の極端なシナリオ、例えば非常に高頻度の書き込み操作が存在する場合にのみ、そのパフォーマンスはコミュニティ版に近い水準まで後退します。クラウド版では、この動作を柔軟に制御するためにpassive-rehash-enabled設定項目が提供されています。 |
レプリカのマスター/スレーブ切断時のリダイレクト | クラウド上のすべてのメジャーバージョンの最新マイナーバージョンは、レプリカのマスター切断時の再接続先リダイレクトに対応しています。 説明: レプリカとマスターノードの接続が切断された場合、フェイルオーバーによる復旧が完了するまでの間、レプリカに到達した読み取りリクエストはマスターノードにリダイレクトされます。これにより、レプリカが読み取り専用状態にある際に接続切断によって古いデータが提供されることを防ぎます。 | | | 業務側で特別な対応は不要です。 |
info/client info/client list | 各バージョンでサポートされるフィールドは、必ずしもコミュニティ版と完全に互換性があるとは限りません。proxy側では必要に応じて機密フィールドをマスクします。詳細については、Proxyアーキテクチャとダイレクト接続モードの使用差異を参照してください。 | | | 業務がclientコマンドに依存しているかどうかを自己確認してください。必須でない場合は、スロークエリやノードのメモリ急増を避けるため、client listの実行を避けてください。 |
cluster slots | クラスタ版のcluster slotsコマンドは、一部の機密情報をマスクし、変換します。 | | | |
auth/migrate auth/client kill user/acl setuser | ACLコンポーネントはありません。 | ACL関連インターフェースはサポートされていません。 | | - |
command/ command info | commandコマンドは、クライアントライブラリがルーティング決定やリダイレクトなどの操作を行うために、コマンドのメタデータ情報を提供します。 | | | 業務側で特別な対応は不要です。 |
geo* store | Redis 6.2および7.0バージョンでは、以下の問題が修正されました。STOREオプションをサポートするGEOコマンド(GEORADIUS、GEORADIUSBYMEMBER、GEOSEARCHSTOREなど)において、ソースキーが空のキーである場合の動作が、これまでの「空の配列を返し、ターゲットキーを削除しない」から「ターゲットキーを削除して0を返す」に変更されました。 | | | ![]() |
zrangestore | 設定項目zset-max-ziplist-entriesが0に設定されている場合に、ZRANGESTOREコマンドがRedisのクラッシュを引き起こす問題を修正しました。 | | | - |
lpop/rpop coun | 6.2.7と7.0.0では、LPOP/RPOPの戻り値の動作が統一的に修正されました。 1. 键が存在し、count = 0の場合、空の配列[]を返します(旧版はnilを返します)、 2. 键が存在せず、かつcountパラメータを指定した場合、長さが-1の空の配列[]を返します(旧版はnilを返します)。 | | | ![]() |
フィードバック