mcpField
R
redis-expert

redis-expert

github.com/rightnow-aiデータ・データベース18.2k142 回インストール24 週間前に更新
リポジトリ

redis-expert について

redis-expert は、データ、キャッシュ、メッセージングのパターンを設計するバックエンドエンジニア向けの Redis スキルです。データ構造の選択、永続化とメモリのトレードオフ、運用上の手法、障害を考慮した設計を扱います。

主な機能

  1. 01アクセスパターンに応じた Redis データ構造の選択
  2. 02TTL、永続化、メモリ管理の指針
  3. 03パイプライン、トランザクション、Luaスクリプト
  4. 04Streams、ソート済みセット、一般的なパターン
  5. 05運用上の注意点と段階的な縮退

活用シーン

  1. 01有効期限付きキャッシュアサイドの設計
  2. 02ランキング、レート制限、優先キューの構築
  3. 03Redis Streamsによるメッセージ処理
  4. 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 を設定し、スクリプトを高速に実行できるよう設計してください

コメント