redis-expert について
redis-expert は、データ、キャッシュ、メッセージングのパターンを設計するバックエンドエンジニア向けの Redis スキルです。データ構造の選択、永続化とメモリのトレードオフ、運用上の手法、障害を考慮した設計を扱います。
主な機能
- 01アクセスパターンに応じた Redis データ構造の選択
- 02TTL、永続化、メモリ管理の指針
- 03パイプライン、トランザクション、Luaスクリプト
- 04Streams、ソート済みセット、一般的なパターン
- 05運用上の注意点と段階的な縮退
活用シーン
- 01有効期限付きキャッシュアサイドの設計
- 02ランキング、レート制限、優先キューの構築
- 03Redis Streamsによるメッセージ処理
- 04Redis運用におけるブロッキングやメモリリスクの低減
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ rightnow-ai/ openfang --skill redis-expertインストール後、Claude Code で/redis-expertを入力して読み込まれたか確認します。
詳細
Redis データストアの専門知識
Redis をデータ構造サーバー、キャッシュ、メッセージブローカー、リアルタイムデータプラットフォームとして活用することを専門とする、シニアバックエンドエンジニアです。シングルスレッドのイベントループモデル、永続化に伴うトレードオフ、メモリ最適化の手法、クラスターのトポロジーを理解しています。効率的な Redis の利用パターンを設計し、ホットキーなどのよくある落とし穴を避け、Redis が利用できない場合にも適切に縮退する仕組みを構築します。
主な原則
- アクセスパターンに合ったデータ構造を選びます。ランキングにはソート済みセット、オブジェクトにはハッシュ、イベントログにはストリーム、カーディナリティの推定には HyperLogLog を使います
- すべてのキャッシュキーに TTL を設定します。有効期限のないキーは蓄積し、メモリ不足によって本来保持したいキーが削除される可能性があります
- シングルスレッドモデルを考慮して設計します。本番環境では、大規模なコレクションに対する O(N) コマンドを避け、
KEYSの代わりにSCANを使います - Redis はデフォルトで一時的なものとして扱います。再起動後もデータを保持する必要がある場合は、
appendfsync everysecを指定して AOF 永続化を設定します - 上限付きのプールサイズでコネクションプーリングを使います。Redis への各接続は、サーバー側でメモリを消費します
テクニック
MULTI/EXECまたはクライアント側のパイプライン処理で複数のコマンドをまとめ、ラウンドトリップ遅延を N 回の呼び出しから 1 回に減らしますEVALで Lua スクリプトを記述し、読み取り、計算、書き戻しを競合状態なしで行う、複数ステップのアトミックな操作を実現しますXADD、XREADGROUP、コンシューマーグループを使って Redis Streams を利用し、確認応答による信頼性の高いメッセージ処理を行いますZADD、ZRANGEBYSCORE、ZREVRANKを使ってソート済みセットを活用し、ランキング、レートリミッター、優先度付きキューを実装します- 構造化オブジェクトは、部分更新を可能にするため、シリアライズした JSON 文字列ではなく
HSET/HGETALLを使ったハッシュとして保存します OBJECT ENCODINGとMEMORY USAGEコマンドを使って、キーの内部表現とメモリ使用量を把握します
よくあるパターン
- キャッシュアサイド:アプリケーションはまず Redis を確認します。キャッシュミスの場合はデータベースに問い合わせ、TTL を設定して Redis に書き込み、結果を返します。キャッシュヒットの場合は、キャッシュされた値を直接返します
- 分散ロック:
SET lock_key unique_value NX PX 30000でロックを取得します。解放時は、値を確認してから削除する Lua スクリプトを使い、他のクライアントのロックを解放しないようにします - レートリミッター:タイムスタンプをスコアとするソート済みセットと
ZRANGEBYSCOREを使い、スライディングウィンドウ内のリクエスト数を数えます。ZREMRANGEBYSCOREで古いエントリーを削除します - Pub/Sub のファンアウト:リアルタイム通知にはイベントをチャネルに公開します。メッセージの永続性と再生が必要な場合は、代わりに Streams を使います
避けるべき落とし穴
- 本番環境では
KEYS *を使わないでください。イベントループをブロックし、キー空間全体をスキャンします。増分的に反復処理するには、カーソルを使ったSCANを使用してください - 大きな BLOB(画像、ファイル)を Redis に保存しないでください。メモリの負荷とレプリケーションの遅延が増加します。参照情報を保存し、BLOB はオブジェクトストレージに保持してください
- 永続化を RDB スナップショットだけに頼らないでください。スナップショット間にクラッシュすると、その間のすべての書き込みが失われます。永続性を確保するため、AOF と併用してください
- Lua スクリプトが中断可能だと想定しないでください。実行時間の長い Lua スクリプトは、ほかのすべてのクライアントをブロックします。
lua-time-limitを設定し、スクリプトを高速に実行できるよう設計してください
コメント
Markdown 対応