Redis Glossary

Redis のコアコンセプトと用語リファレンス。

Cheat Sheet

Redis Cheat Sheet

Use Cases Cheat Sheet

Redis Use Cases Cheat Sheet

データ型

Keys

  • Key 名は最大 512MB まで可能
  • Keys は binary safe で、バイトのシーケンスで構成されるため、任意のバイト値を使用可能

有効期限の設定:

有効期限を設定有効期限を確認有効期限を削除
EXPIREPTTLPERSIST
EXPIREATTTL
PEXPIRE
PEXPIREAT

その他のコマンド:EXISTSTYPE

Strings

  1. 文字列、数値、シリアライズされた JSON、バイナリデータを保存可能(最大 512MB)
  2. EXPIRE と組み合わせてキャッシュによく使用
  3. 数値操作をサポート
  4. コマンド実行前にエンコーディングを検証

主なコマンド: SET, GET, INCR, INCRBY, INCRBYFLOAT, DECRBY

Hashes

類似:

  • Java HashMap
  • Python Dict
  • JSON Object

特徴:

  • ミュータブル(変更可能)
  • 単層構造:Hash 内に List、Set、その他の構造を埋め込むことはできない

主なコマンド: HSET, HDEL, HGET, HGETALL, HINCRBY, HINCRBYFLOAT, HSCAN, HEXISTS

Lists

類似:

  • Java ArrayList
  • JavaScript Array
  • Python list

主なコマンド: RPUSH, LPUSH, LRANGE, LPOP, RPOP

Sets

順序なしで重複のない文字列のコレクション。

主なコマンド: SADD, SMEMBERS, SISMEMBER, SINTER, SUNION

Sorted Sets

スコア付きの順序付きコレクション、スコア順にソート。

主なコマンド: ZADD, ZRANGE, ZRANK, ZSCORE


キャッシュ(Cache)

ホットデータのキャッシュ戦略:

2つの方式:

  1. 読み取り前に Redis を確認、データがなければ DB から読み取り Redis に保存
  2. データ挿入時に同時に Redis に書き込み
  sequenceDiagram
    participant Ws as Webserver
    box Cache Layer
    participant R as Redis
    end
    participant Db as Database

    Ws ->> R: Request
    alt Data Exist
        R -->> Ws: Response Data
    else Data Not Exist
        R ->> Db: Get Data
        Db ->> R: Response Data
        R ->> Ws: Response Data
    end

キャッシュの問題

Penetration(穿透)

クライアントがリクエストしたデータが Cache にも Database にも存在せず、毎回のリクエストが Cache を通過してデータベースに直接到達する。

Hotspot Invalid / Cache Stampede(擊穿)

人気のある Cache key が期限切れになり、高い同時アクセスがこの key に集中すると、トラフィックが直接データベースに到達する。

Avalanche(雪崩)

ある時点で大量のキャッシュデータが同時に期限切れ(TTL Expired)になり、後続のクエリがすべてバックエンドデータベースにリクエストされ、システム過負荷を引き起こす可能性がある。

Pollution(汚染)

不適切または無効なデータがキャッシュに入り、キャッシュデータが不正確または使用不能になる。

Consistency(一貫性)

キャッシュとデータベースのデータが一致しない。通常、データ更新時にキャッシュへの同期が間に合わないことが原因。

Breakdown(障害)

Redis キャッシュサービスが障害を起こすと、バックエンドデータベースがすべてのトラフィックを受け、過大な負荷がかかる。

永続化(Persistence)

  • RDB(Redis Database Backup file):データスナップショットファイルを生成
  • AOF(Append Only File):リアルタイムでコマンドを追記するログファイル
  flowchart LR
    R[Redis]
    PS[Persistent Storage-Entire Dataset]

    R -->|AOF, Snapshot| PS

Snapshot

トリガー方法:

  • 手動(Manually)
  • 自動(Auto)
再起動時間が長すぎると実用的ではない。代替案:Replication(Cluster + Sentinel)

AOF(Append-Only File)

各書き込み操作をリアルタイムで記録し、ログを再生してデータを復元できる。


分散ロック(Distributed Lock)

従来のデータベースロック機構については、Database Locks を参照してください。

SETNX(SET if Not Exists)を使用して基本的な分散ロックを実装:

  flowchart TD
    C1[Client1]
    K{{setnx-lockKey,123456xyz,TTL}}
    WnRL[Wait and Retry Later]
    Dwork([Do some work on the shared resource])
    dK([del-localkey])
    C([Complete])

    C1 -->K
    K -->|True: 0, failed to acquire lock| WnRL
    K -->|True: 1, acquired the lock| Dwork
    Dwork --> dK
    dK --> C

完全なフォールトトレラントサポートライブラリ:

  • Java: Redisson

Redis Set Lock vs Redisson Lock

実装レベルの比較

実装レベルRedis Set LockRedisson Lock
基本コマンドSET key value NX EX ttlLua スクリプト + 複数の Redis コマンド
原子性保証Redis ネイティブ単一コマンド原子性Lua スクリプト実行原子性
ネットワーク往復1回1回(スクリプトは複雑)
Redis 負荷非常に軽量中程度(スクリプト実行)
ストレージ構造シンプルな key-valueHash 構造 + メタデータ

機能特性の比較

機能項目Redis Set LockRedisson Lock
基本排他ロック✅ 完全サポート✅ 完全サポート
リエントラントロック❌ 非サポート✅ サポート(カウント機構)
自動更新❌ 固定 TTL✅ Watchdog 機構
公平ロック❌ 非サポート✅ サポート
読み書きロック❌ 非サポート✅ サポート
条件待機❌ 非サポート✅ サポート
マルチロック❌ 非サポート✅ サポート
ロック監視❌ 基本監視✅ 豊富な監視

判断基準

ビジネス特性推奨方案
タスク実行時間 < 15分Redis Set Lock
タスク実行時間 > 30分Redisson Lock
高並行 + 低レイテンシ要件Redis Set Lock
リエントラントロックが必要Redisson Lock
マイクロサービス軽量化Redis Set Lock
エンタープライズ級複雑アプリRedisson Lock

Redisson Lock Types

基本ロックタイプ

ロックタイプインターフェースリエントラント公平性適用シーン
リエントラントロックRLock✅ サポート❌ 非公平一般的な排他シーン
公平ロックRFairLock✅ サポート✅ 公平順序処理が必要
読み書きロックRReadWriteLock✅ サポート❌ 非公平読み多い書き少ない
マルチロックRMultiLock✅ サポート❌ 非公平複数リソース同時ロック
赤ロックRRedLock✅ サポート❌ 非公平複数 Redis インスタンス高可用

同期ツールタイプ

ツールタイプインターフェース用途適用シーン
セマフォRSemaphore並行数制御レート制限、リソースプール
期限付きセマフォRPermitExpirableSemaphoreTTL 付きセマフォ一時リソース割り当て
カウントダウンラッチRCountDownLatch複数タスク完了待機バッチタスク協調

選択基準

要件特性推奨選択
一般排他 + 高性能RLock
公平性が必要RFairLock
読み書き分離RReadWriteLock
複数リソース原子操作RMultiLock
極めて高い可用性要件RRedLock
並行数制御RSemaphore
タスク同期待機RCountDownLatch

性能優先度: RLock > RReadWriteLock > RSemaphore > RFairLock > RMultiLock > RRedLock


ユースケース

Rate Limiter(レート制限)

User ID / Device ID / Token / API Key に基づいてレート制限:

  sequenceDiagram
    participant U1 as User1

    box Webservers
        participant WsA as Webserver_A
    end
    box Cache
        participant R as Redis
    end
    participant Db as Database

    U1 -->> WsA: Requests

    WsA -->> R: Requests

    alt within rate_limit
        R ->> Db: Allow Access
        Db ->> R: Response
        R ->> WsA: Response
        WsA ->> U1: Response
    else over rate_limit
        R -->> Db: ❌
    end

Delay Queue(遅延キュー)

遅延操作、Ack 確認機構なし。

適用シーン:

  1. ECサイトで注文後、一定時間内に支払いがなければ注文自動キャンセル
  2. 配車サービスで一定時間内にドライバーが受注しなければキャンセル
  3. フードデリバリーで店舗が一定時間内に受注しなければ自動キャンセル

Session Store

ステートレスサーバー間でセッションデータを共有:

  flowchart LR
    U1[User1]
    U2[User2]

    subgraph WebServers
    WsA[Webserver_A]
    WsB[Webserver_B]
    end

    subgraph box
    R[Redis]
    end

    U1 -->|Request| WsA
    U2 -->|Request| WsB

    WebServers -->|Store Session Data| R

    WsA -->|Cookie-Unique Session ID| U1
    WsB -->|Cookie-Unique Session ID| U2

その他のアプリケーション

適用シーン使用方法
Game Ranking / LeaderboardSorted Sets
Counter(カウンター)INCR, INCRBY(アトミック操作)
期限付きビジネスTTL 有効期限機構
いいね、友達などの関係保存Sets

関連トピック