Redis Patterns
一般的なバックエンド使用例に対するRedisベストプラクティスの参考資料。
How It Works
Redisはメモリ内データ構造ストアで、文字列、ハッシュ、リスト、セット、ソート済みセット、ストリームなどをサポートします。単一インスタンスでは個々のRedisコマンドは原子的ですが、マルチステップワークフローはLuaスクリプト、MULTI/EXECトランザクション、または明示的な同期化が必要です。RDBスナップショットまたはAOFログを通じてデータをオプションで永続化します。クライアントはRESPプロトコルを使用してTCP経由で通信します。接続プール不可欠でリクエストごとのハンドシェイクオーバーヘッドを回避します。
When to Activate
- アプリケーションにキャッシング追加
- レート制限またはスロットリング実装
- 分散ロックまたはコーディネーション構築
- セッションまたはトークンストレージ設定
- Pub/SubまたはRedis Streams for messaging使用
- 本番環境でRedis設定(プール、削除、クラスタリング)
Data Structure Cheat Sheet
Core Patterns
Cache-Aside (Lazy Loading)
Write-Through Cache
Cache Invalidation
Session Storage
Rate Limiting
Fixed Window (Simple)
Sliding Window (Lua — Atomic)
Distributed Locks
Distributed Lock (Single Node — SET NX PX)
マルチノード設定の場合、フルRedlockアルゴリズムを実装する
redlock-pyライブラリを使用してください。
Pub/Sub & Streams
Pub/Sub (Fire-and-Forget)
Redis Streams (Durable Queue)
配信保証、コンシューマーグループ、または再生が必要な場合、Pub/Sub代わりにStreamsを優先してください。
Key Design
Naming Conventions
TTL Strategy
常にTTLを設定してください。TTLなしのキーは無限に蓄積してメモリ圧力を引き起こします。
Connection Management
Connection Pooling
Cluster Mode
Sentinel (High Availability)
Eviction Policies
redis.confを通じて設定:maxmemory-policy allkeys-lru
Anti-Patterns
Cache Miss Stampede Prevention
マルチプロセスデプロイメント:インプロセスロックを上記の分散ロックセクション から
acquire_lock/release_lockに置き換えてください。
Examples
Django/Flask APIエンドポイントにキャッシング追加: レスポンスに5分TTLでCache-asideを使用。リクエストパラメータでキーを指定。
ユーザーごとにAPIレート制限:
低トラフィックエンドポイントに固定ウィンドウを pipeline(transaction=True) で使用;正確なユーザーごと制限にはsliding-windowの Lua使用。
ワーカー間のバックグラウンドジョブ調整:
予想ジョブ期間を超えるTTLで acquire_lock を使用。常に finally ブロックでリリース。
複数購読者への通知のファンアウト: ファイアアンドフォーゲットにPub/Subを使用。保証配信または再生が必要な場合、Streamsに切り替え。
Quick Reference
Related
- Skill:
postgres-patterns— リレーショナルデータパターン - Skill:
backend-patterns— APIおよびサービスレイヤーパターン - Skill:
database-migrations— スキーマバージョニング - Skill:
django-patterns— Djangoキャッシュフレームワーク統合 - Agent:
database-reviewer— 全データベースレビューワークフロー


