Redis

インメモリKey-Valueストア

RedisはインメモリのKey-Valueストア。 超高速(100,000+ ops/sec)で、キャッシュ、セッション、リアルタイムランキング、 Pub/Sub、キューなど多用途に使用されます。

データ型

String

基本型。最大512MB。カウンター、キャッシュに使用

List

順序付きリスト。キュー、タイムライン

Set

重複なし集合。タグ、ユニークユーザー

Sorted Set (ZSet)

スコア付き集合。ランキング、優先度キュー

Hash

フィールド-値のマップ。オブジェクト格納

Stream

追記専用ログ。イベントソーシング、メッセージング

基本コマンド

1# String
2SET user:1:name "Alice"
3GET user:1:name
4INCR counter # アトミックにインクリメント
5SETEX session:abc 3600 "data" # TTL付き
6
7# List
8LPUSH queue "task1" # 先頭に追加
9RPUSH queue "task2" # 末尾に追加
10LPOP queue # 先頭から取り出し
11LRANGE queue 0 -1 # 全要素取得
12
13# Set
14SADD tags:post:1 "redis" "database"
15SMEMBERS tags:post:1
16SISMEMBER tags:post:1 "redis"
17
18# Sorted Set
19ZADD leaderboard 100 "user:1"
20ZADD leaderboard 200 "user:2"
21ZREVRANGE leaderboard 0 9 WITHSCORES # 上位10件
22
23# Hash
24HSET user:1 name "Alice" age 30
25HGET user:1 name
26HGETALL user:1
27
28# TTL
29EXPIRE key 300 # 300秒後に削除
30TTL key # 残り時間確認
31PERSIST key # TTLを解除

永続化

RDB(スナップショット)

  • • 定期的にメモリ全体をダンプ
  • • コンパクト、起動が速い
  • • スナップショット間のデータは失われる
  • save 900 1(900秒で1回変更)

AOF(Append Only File)

  • • 全ての書き込み操作をログ
  • • データ損失が少ない
  • • ファイルサイズが大きくなる
  • appendfsync everysec(毎秒sync)

推奨設定(本番)

RDB + AOF の両方を有効化。AOFで耐久性確保、RDBで高速リカバリ。

高可用性

Redis Sentinel

マスター/レプリカ構成の監視と自動フェイルオーバー。 3台以上のSentinelでクォーラムを形成。

Master → Replica1, Replica2
Sentinel × 3(監視・選出)

Redis Cluster

データを16384スロットに分散。水平スケール可能。 各スロットにマスター+レプリカ。

Slot 0-5460: Node1 (M) + Node4 (R)
Slot 5461-10922: Node2 (M) + Node5 (R)
Slot 10923-16383: Node3 (M) + Node6 (R)

典型的なユースケース

キャッシュ

DBクエリ結果、API応答のキャッシュ

セッション

ユーザーセッションの共有ストア

ランキング

Sorted Setでリアルタイムランキング

レート制限

INCR + EXPIREでAPI制限

Pub/Sub

リアルタイム通知、チャット

キュー

List/Streamでジョブキュー

SRE/インフラ観点

メモリ管理

  • maxmemory で上限設定
  • maxmemory-policy でエビクション戦略
  • • allkeys-lru: 全キーからLRU削除(キャッシュ向け)
  • • volatile-lru: TTL付きキーからLRU削除

監視項目

  • • メモリ使用量(used_memory)
  • • ヒット率(keyspace_hits / misses)
  • • 接続数(connected_clients)
  • • レプリケーション遅延
  • • スロークエリ(slowlog)

注意点

  • • KEYS * は本番で使わない(ブロッキング)→ SCAN を使用
  • • 大きな値は分割を検討
  • • シングルスレッドなので重い操作に注意