Redis
インメモリKey-Valueストア
RedisはインメモリのKey-Valueストア。 超高速(100,000+ ops/sec)で、キャッシュ、セッション、リアルタイムランキング、 Pub/Sub、キューなど多用途に使用されます。
データ型
String
基本型。最大512MB。カウンター、キャッシュに使用
List
順序付きリスト。キュー、タイムライン
Set
重複なし集合。タグ、ユニークユーザー
Sorted Set (ZSet)
スコア付き集合。ランキング、優先度キュー
Hash
フィールド-値のマップ。オブジェクト格納
Stream
追記専用ログ。イベントソーシング、メッセージング
基本コマンド
1 # String 2 SET user:1:name "Alice" 3 GET user:1:name 4 INCR counter # アトミックにインクリメント 5 SETEX session:abc 3600 "data" # TTL付き 6 7 # List 8 LPUSH queue "task1" # 先頭に追加 9 RPUSH queue "task2" # 末尾に追加 10 LPOP queue # 先頭から取り出し 11 LRANGE queue 0 -1 # 全要素取得 12 13 # Set 14 SADD tags:post:1 "redis" "database" 15 SMEMBERS tags:post:1 16 SISMEMBER tags:post:1 "redis" 17 18 # Sorted Set 19 ZADD leaderboard 100 "user:1" 20 ZADD leaderboard 200 "user:2" 21 ZREVRANGE leaderboard 0 9 WITHSCORES # 上位10件 22 23 # Hash 24 HSET user:1 name "Alice" age 30 25 HGET user:1 name 26 HGETALL user:1 27 28 # TTL 29 EXPIRE key 300 # 300秒後に削除 30 TTL key # 残り時間確認 31 PERSIST 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(監視・選出)
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)
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 を使用
- • 大きな値は分割を検討
- • シングルスレッドなので重い操作に注意