Redis

インメモリデータストアで、キャッシュ、セッション管理、Pub/Sub に使われる

データベースキャッシュ
Redis」の技術書を見る (8 冊) →

Redis とは

Redis (Remote Dictionary Server) は、2009 年に Salvatore Sanfilippo が開発したオープンソースのインメモリデータストアである。全データをメモリ上に保持するため、読み書きがマイクロ秒〜ミリ秒単位で完了する。AWS では ElastiCache for Redis または MemoryDB for Redis として利用できる。

データ構造

Redis の強みは、単純な Key-Value だけでなく多彩なデータ構造をネイティブにサポートする点にある。

データ構造用途コマンド例
Stringキャッシュ、カウンターSET key value / INCR counter
Hashオブジェクトの格納HSET user:1 name "Alice"
Listキュー、タイムラインLPUSH queue task1 / RPOP queue
Setユニーク集合、タグSADD tags "aws" / SMEMBERS tags
Sorted Setランキング、スコアボードZADD leaderboard 100 "player1"
Streamイベントログ、メッセージングXADD events * type "order"

キャッシュ戦略

キャッシュ戦略を以下にまとめる。

戦略読み取り書き込み整合性
Cache-Asideアプリがキャッシュを確認→ミスなら DB から取得→キャッシュに書くDB に書く→キャッシュを無効化結果整合性
Write-Throughキャッシュから読むキャッシュと DB に同時に書く強い整合性
Write-Behindキャッシュから読むキャッシュに書く→非同期で DB に反映結果整合性

Lambda + DynamoDB 構成では Cache-Aside が最も一般的。TTL を設定してキャッシュの鮮度を管理する。

ElastiCache vs MemoryDB

ElastiCache と MemoryDB の違いを以下にまとめる。

観点ElastiCache for RedisMemoryDB for Redis
用途キャッシュプライマリ DB
耐久性ベストエフォートMulti-AZ トランザクションログ
レイテンシマイクロ秒 (読み取り)マイクロ秒 (読み取り)、ミリ秒 (書き込み)
コスト低い高い

キャッシュ用途なら ElastiCache、Redis をプライマリ DB として使うなら MemoryDB を選択する。

Pub/Sub

Redis の Pub/Sub はリアルタイム通知に使える。パブリッシャーがチャンネルにメッセージを送信し、サブスクライバーが受信する。ただし永続化されないため、メッセージの確実な配信が必要な場合は Redis Streams または SQS/SNS を使う。

よくある落とし穴

  • メモリ枯渇: maxmemory-policy を設定しないと、メモリが枯渇して書き込みが失敗する。allkeys-lru (LRU で自動削除) が一般的
  • ホットキー: 特定のキーにアクセスが集中すると、そのノードがボトルネックになる。キーの分散設計が重要
  • 大きな値: 1 つのキーに数 MB のデータを格納すると、ネットワーク帯域とレイテンシに影響する

関連書籍も参考になる。

この記事は役に立ちましたか?

関連用語

関連する記事