1. Redisとは何か?その特徴と利点・欠点
Redis(Remote Dictionary Server)はメモリ内のKey-Value型データベースで、memcachedに似ていますが、より多機能です。すべてのデータをメモリ上で操作し、定期的に非同期でディスクに保存します。純粋なメモリ操作のため、1秒あたり10万回以上の読み書きが可能で、最速のKey-Value DBの1つです。
Redisの特徴的な利点は以下の通りです:
- 複数のデータ構造をサポート(文字列、リスト、セットなど)
- 1つのvalueに最大1GBのデータを格納可能
- Keyに有効期限を設定可能
主な欠点は物理メモリの容量制限によるもので、大規模データの処理には不向きです。
2. Redisでサポートされる主なデータ型
- String - バイナリセーフな文字列型
- Hash - フィールドと値のマップ
- List - 挿入順序を保持する文字列リスト
- Set - 重複を許さない文字列集合
- Sorted Set - スコア付きの順序付き集合
3. Redisのトランザクション処理
Redisのトランザクションは以下の特性を持ちます:
- すべてのコマンドがシリアル化され順次実行
- 原子性(すべて実行されるか全く実行されない)
- 主要コマンド:MULTI、EXEC、DISCARD、WATCH
// トランザクションの例
WATCH item:count
val = GET item:count
val = val + 1
MULTI
SET item:count $val
EXEC
4. Redisのメモリ管理戦略
Redisには6つのデータ削除ポリシーがあります:
- volatile-lru:LRUアルゴリズムで削除
- volatile-ttl:TTLが短いものから削除
- allkeys-lru:全キー対象にLRU適用
- no-eviction:削除せずエラーを返す
5. Redisクラスタの仕組み
Redisクラスタは16384個のスロットを使用してデータを分散管理します。各ノードが特定のスロット範囲を担当し、CRC16アルゴリズムでキーの配置を決定します。
// スロット計算例
slot = CRC16(key) % 16384
6. キャッシュ問題への対応策
キャッシュ雪崩対策:
- キャッシュの有効期限を分散させる
- ロックやキューを使用してデータベースへの集中アクセスを防ぐ
キャッシュ透過対策:
- Bloomフィルタを使用して存在しないキーを検出
- 空結果も短時間キャッシュする
7. Redisの適切な利用シナリオ
- セッションキャッシュ
- ページ全体のキャッシュ
- キューシステム
- ランキング/カウンタ
- Pub/Subシステム