コマンド | リスク説明 | 代替案 |
HGETALL | ハッシュテーブルの全フィールドを一度に返すため、Key内のフィールドが多すぎる場合にブロッキングが深刻になります。 | HSCANカーソルを使用してバッチ単位で走査します。 |
SMEMBERS | セットの全メンバーを一度に返します。 | SSCANカーソルを使用してバッチ単位で走査します。 |
ZRANGE | ソート済みセットの指定範囲内の全メンバーを一度に返します。 | ZSCANカーソルを使用してバッチ単位で走査するか、クエリ範囲を縮小します。 |
LRANGE | リストの指定範囲内の全要素を一度に返します。 | 範囲を縮小するか、ページングで取得します。 |
SINTER | 複数のセットの積集合を求める場合、要素が多いほど時間がかかります。 | ビジネス側で共通集合の演算を実行します。 |
disable-command-listを設定して無効化することをお勧めします。コマンド | リスク説明 | 代替案 |
KEYS | すべてのキーを走査してパターンに一致させ、Redisサーバーをブロックします。 | SCANカーソルを使用した段階的なマッチングを行います。 |
FLUSHDB | 現在のデータベースの全データを消去し、復元できません。 | SCAN + DELによる段階的な削除を行います。 |
FLUSHALL | インスタンス内の全データベースのデータをすべて消去し、復元できません。 | SCAN + DELによる段階的な削除を行います。 |
SHUTDOWN | Redisサーバーをシャットダウンし、サービス中断とデータ損失を引き起こします。 | コンソールからインスタンスのライフサイクルを管理します。 |
CONFIG | サーバーのランタイム設定を変更し、操作を誤るとクラッシュを引き起こす可能性があります。 | コンソールからインスタンスパラメータを変更します。 |
コマンド | リスク説明 | 使用推奨事項 |
RANDOMKEY | キーをランダムに1つ返し、Redisサーバーをブロックします。 | テスト環境でのみ使用してください。 |
INFO | サーバー統計情報を返し、実行中に他のリクエストをブロックします。 | 問題の切り分け時のみ短時間使用してください。 |
BGREWRITEAOF | AOFファイルを非同期で書き換え、大量のシステムリソースを消費します。 | システムにより自動的にトリガーされます。手動実行は避けてください。 |
BGSAVE | RDBスナップショットを非同期で生成し、大量のシステムリソースを消費します。 | システムにより自動的にトリガーされます。手動実行は避けてください。 |
SELECTコマンドでいつでも切り替えることができます。アーキテクチャ | 使用推奨事項 |
スタンダード版 | 複数のDBでデータを区分できますが、Redis自体はシングルスレッドで処理されるため、複数DB間のリクエストは相互に影響を及ぼします。 |
クラスタ版 | 0号DBを優先的に使用することをお勧めします。0号DB以外は拡張に対応していません。 |
SELECT 0を実行しなくてもよく、不要なネットワークインタラクションを削減できます。方式 | 説明 | 適用シナリオ |
ネイティブバッチコマンド( MGET/MSET) | アトミック操作であり、サーバー側で一括実行されます。 | 同種のキーを一括で読み書きします。 |
Pipeline | 非アトミック操作であり、クライアントが複数のコマンドをまとめて送信します。 | 異なる種類のコマンドを一括で実行します。 |
MGET key1 key2 key3 ... key1000
第一批MGET key1 key2 ... key500# 第二批MGET key501 key502 ... key800
redis.call / redis.pcall で呼び出す Redis コマンドでは、Key の位置は必ず KEYS 配列から取得する必要があります。そうでない場合、エラーが返されます:-ERR bad lua script for redis cluster, all the keys that the script uses should be passed using the KEYS array
Lua script attempted to access a non local key in a cluster node
シーン | 使用推奨事項 |
日常運用 | Monitorを有効にすることはお勧めしません。 |
問題の切り分け | コマンド実行状況を分析するために短時間有効にすることができます。調査が完了したら速やかに無効にしてください。 |
リスクタイプ | 説明 |
データスキュー(Memory Skew) | 同一のHashtagを大量に使用するキーが特定のノードに集中し、そのノードのメモリ使用率が他のノードより大幅に高くなり、メモリアラートや容量不足が早期に発生する可能性があります。 |
リクエストスキュー(Hotspot) | これらのデータに対するすべての読み書きリクエストが同一ノードに集中し、そのノードが性能のボトルネックとなり、遅延の増加やクラスタ全体の停止を引き起こす可能性があります。 |
拡張不可性 | ハッシュスロットの計算は固定のHashtagに依存します。これによって引き起こされる偏りの問題は、クラスタノードを追加しても緩和できません。 |
基準 | 説明 |
最小化と分割 | すべての関連データに統一のHashtagを使用せず、業務タイプや機能モジュールごとに異なる細粒度のHashtagを使用してください。 |
均一な分散を確保します。 | Hashtag値が全体として均等に分散されるようにしてください。元のIDの後にサフィックスを追加して手動でシャーディングできます。 |
必要な場合にのみ使用してください。 | トランザクション、Luaスクリプト、またはマルチキーコマンドを使用する必要がある場合にのみHashtagを使用してください。無関係なキーにはこの機能を濫用しないでください。 |
SET {global}:user:1001 "data1"SET {global}:user:1002 "data2"SET {global}:order:5001 "order_data"
SET {user:1001}:profile "data1"SET {user:1001}:session "session_data"SET {order:5001}:detail "order_data"
制限項目 | 説明 |
メッセージ永続化 | RedisのPub/Subはメッセージを永続化しません。コンシューマーがオフラインの間のメッセージは失われます。 |
メッセージ確認 | 消費確認メカニズム(ACK)には対応しておらず、メッセージの確実な消費を保証できません。 |
蓄積能力 | List構造をキューとして使用する場合、メッセージの蓄積によりメモリが大量に消費され、キャッシュ性能に影響します。 |
消費モデル | コンシューマーグループ、メッセージパーティショニングなどの高度な機能には対応していません。 |
フィードバック