Redisに関する重要な技術質問集

1. Redisとは何か?その特徴と利点・欠点

Redis(Remote Dictionary Server)はメモリ内のKey-Value型データベースで、memcachedに似ていますが、より多機能です。すべてのデータをメモリ上で操作し、定期的に非同期でディスクに保存します。純粋なメモリ操作のため、1秒あたり10万回以上の読み書きが可能で、最速のKey-Value DBの1つです。

Redisの特徴的な利点は以下の通りです:

  • 複数のデータ構造をサポート(文字列、リスト、セットなど)
  • 1つのvalueに最大1GBのデータを格納可能
  • Keyに有効期限を設定可能

主な欠点は物理メモリの容量制限によるもので、大規模データの処理には不向きです。

2. Redisでサポートされる主なデータ型

  1. String - バイナリセーフな文字列型
  2. Hash - フィールドと値のマップ
  3. List - 挿入順序を保持する文字列リスト
  4. Set - 重複を許さない文字列集合
  5. 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システム

タグ: redis データベース キャッシュ 分散システム NoSQL

7月17日 03:04 投稿