CheatSheet
日本語 icon日本語English iconEnglish
チートシートとはカンニングペーパーのことです。それが転じて、本来覚えることをまとめておいたものです。
要点をすぐに参照できるようにまとめてみました。

Redis

エンジニアのためのWebチートシート

Redisは、高速なインメモリデータストアです。 キャッシュ、セッション管理、リアルタイムランキング、メッセージキューなど幅広い用途に使われます。 データ型、キー管理、Pub/Sub、ストリーム、トランザクション、実用パターンなどをチートシートにまとめました。

接続 & キー管理

接続

  • redis-cli でサーバーに接続する方法です。

    # ローカル接続
    redis-cli
    
    # ホスト・ポート指定
    redis-cli -h 127.0.0.1 -p 6379
    
    # パスワード付き
    redis-cli -h host -p 6379 -a password
    
    # URI形式
    redis-cli -u redis://user:pass@host:6379/0
    
    # TLS接続
    redis-cli --tls -h host -p 6380
    
    # 接続テスト
    PING                  # => PONG
    
    # データベース選択(0〜15)
    SELECT 1
    
    # 認証(ACL対応)
    AUTH password
    AUTH username password

キー操作

  • キーの検索、確認、削除、名前変更です。

    # キーの検索(本番では SCAN を推奨)
    KEYS user:*            # パターンマッチ
    SCAN 0 MATCH user:* COUNT 100  # 安全なイテレータ
    
    # キーの確認
    EXISTS key             # 存在確認 => 1 or 0
    TYPE key               # データ型 => string, list, set...
    OBJECT ENCODING key    # 内部エンコーディング
    
    # キーの削除
    DEL key1 key2          # 同期削除
    UNLINK key1 key2       # 非同期削除(ノンブロッキング)
    
    # キーの名前変更
    RENAME key newkey
    RENAMENX key newkey    # newkey が存在しない場合のみ
    
    # キーのコピー(Redis 6.2+)
    COPY source destination
    
    # メモリ使用量
    MEMORY USAGE key
    
    # 現在のDBのキー数
    DBSIZE

有効期限 (TTL)

  • キーの有効期限の設定と確認です。

    # 有効期限の設定
    EXPIRE key 120           # 120秒後に期限切れ
    PEXPIRE key 120000       # ミリ秒指定
    EXPIREAT key 1672531200  # UNIXタイムスタンプ指定
    
    # 有効期限の確認
    TTL key                  # 残り秒数
    PTTL key                 # 残りミリ秒数
    # -1: 無期限
    # -2: キーが存在しない
    
    # 有効期限の除去
    PERSIST key              # 無期限に戻す
    
    # SET 時に同時に設定
    SET key "value" EX 60    # 60秒
    SET key "value" PX 60000 # 60000ミリ秒
    
    # SETEX / PSETEX
    SETEX key 120 "value"    # 120秒
    PSETEX key 120000 "value" # ミリ秒

文字列 (Strings)

基本操作

  • 文字列の取得・設定・一括操作です。

    # 基本
    SET key "value"
    GET key                  # => "value"
    
    # 存在しない場合のみセット
    SETNX key "value"        # => 1(成功) or 0(既存)
    
    # 複数キーの一括操作
    MSET k1 "v1" k2 "v2" k3 "v3"
    MGET k1 k2 k3
    
    # 値を返しつつ新しい値をセット
    GETSET key "new_value"   # => "old_value"
    
    # 文字列操作
    APPEND key " world"      # 値に追記
    STRLEN key               # 文字列長
    GETRANGE key 0 4         # 部分文字列取得
    SETRANGE key 6 "Redis"   # 部分文字列書き換え

数値操作

  • 文字列に格納された数値のインクリメント・デクリメントです。

    SET counter 10
    
    # インクリメント
    INCR counter             # +1 => 11
    INCRBY counter 5         # +5 => 16
    
    # デクリメント
    DECR counter             # -1 => 15
    DECRBY counter 3         # -3 => 12
    
    # 浮動小数点
    INCRBYFLOAT counter 1.5  # +1.5 => "13.5"
    INCRBYFLOAT counter -0.5 # -0.5 => "13.0"
    
    # アクセスカウンター例
    INCR page:views:/home
    INCR page:views:/about
    
    # 日別カウンター例
    INCR stats:2026-02-21:visits
    EXPIRE stats:2026-02-21:visits 604800

SET オプション

  • SET コマンドの条件付き・期限付きオプションです。

    # EX: 秒単位の有効期限
    SET key "value" EX 60
    
    # PX: ミリ秒単位の有効期限
    SET key "value" PX 60000
    
    # NX: キーが存在しない場合のみセット
    SET key "value" NX
    
    # XX: キーが存在する場合のみセット
    SET key "value" XX
    
    # 組み合わせ
    SET key "value" NX EX 60
    
    # 分散ロックパターン
    SET lock:resource "owner_id" NX EX 30
    # NX: 他がロック中なら失敗
    # EX 30: 30秒後に自動解放
    
    # GET: 古い値を返しつつ新値をセット(Redis 6.2+)
    SET key "new" GET
    # => "old_value"

ハッシュ & リスト

ハッシュ (Hashes)

  • フィールドと値のペアを持つオブジェクト表現です。

    # セット(複数フィールド可)
    HSET user:1001 name "Alice" age 30 email "alice@example.com"
    
    # 取得
    HGET user:1001 name          # => "Alice"
    HMGET user:1001 name age     # 複数フィールド
    HGETALL user:1001            # 全フィールドと値
    
    # フィールド操作
    HDEL user:1001 email         # フィールド削除
    HEXISTS user:1001 name       # 存在確認 => 1
    HLEN user:1001               # フィールド数
    HKEYS user:1001              # 全フィールド名
    HVALS user:1001              # 全値
    
    # 存在しない場合のみセット
    HSETNX user:1001 role "admin"
    
    # 数値操作
    HINCRBY user:1001 age 1      # 整数加算
    HINCRBYFLOAT user:1001 score 0.5
    
    # イテレーション
    HSCAN user:1001 0 MATCH na* COUNT 10

リスト (Lists)

  • 挿入順序を保持するリストです。キューやスタックに最適です。

    # 追加
    LPUSH mylist "c" "b" "a"     # 先頭に追加 => [a,b,c]
    RPUSH mylist "d" "e"         # 末尾に追加 => [a,b,c,d,e]
    
    # 取得
    LRANGE mylist 0 -1           # 全要素
    LRANGE mylist 0 2            # インデックス 0〜2
    LINDEX mylist 0              # インデックスで取得
    LLEN mylist                  # リスト長
    
    # 取り出し(削除 + 返却)
    LPOP mylist                  # 先頭を取り出し
    RPOP mylist                  # 末尾を取り出し
    LPOP mylist 3                # 先頭から3つ(Redis 6.2+)
    
    # 挿入
    LINSERT mylist BEFORE "c" "b2"
    LINSERT mylist AFTER "c" "c2"
    
    # 更新・削除
    LSET mylist 0 "new_value"    # インデックス0を更新
    LREM mylist 2 "value"        # 先頭から2つ削除
    LTRIM mylist 0 99            # 先頭100件のみ保持
    
    # 移動(Redis 6.2+)
    LMOVE source dest LEFT RIGHT

ブロッキング操作

  • データが来るまで待機するメッセージキュー向け操作です。

    # BLPOP: 先頭を取り出し(データが来るまで待機)
    BLPOP mylist 30       # 最大30秒待機
    BLPOP list1 list2 30  # 複数リストを監視
    
    # BRPOP: 末尾を取り出し(待機)
    BRPOP mylist 30
    
    # BLMOVE: 移動(ブロッキング版、Redis 6.2+)
    BLMOVE source dest LEFT RIGHT 30
    
    # メッセージキュー例
    # Producer:
    RPUSH queue:emails '{"to":"alice@example.com"}'
    
    # Consumer(ワーカー):
    BLPOP queue:emails 0  # 0 = 無限待機
    
    # 信頼性の高いキュー(RPOPLPUSH パターン)
    # 処理中リストにコピーしてから処理
    LMOVE queue:tasks queue:processing LEFT RIGHT
    # 処理完了後
    LREM queue:processing 1 "task_data"
    
    # 注意:
    # - 0 で無限待機(タイムアウトなし)
    # - 複数リスト指定時は最初にデータが来たリストから取得
    # - より高度なキューには Streams を推奨

セット & ソート済みセット

セット (Sets)

  • ユニークな要素の集合と集合演算です。

    # メンバー操作
    SADD myset "apple" "banana" "cherry"
    SREM myset "banana"          # 削除
    SISMEMBER myset "apple"      # 存在確認 => 1
    SMEMBERS myset               # 全メンバー
    SCARD myset                  # メンバー数
    
    # ランダム取得
    SRANDMEMBER myset 2          # 2つ取得(削除しない)
    SPOP myset                   # 1つ取り出し(削除する)
    
    # 移動
    SMOVE source dest "apple"
    
    # 集合演算
    SINTER set1 set2             # 積集合(共通要素)
    SUNION set1 set2             # 和集合(全要素)
    SDIFF set1 set2              # 差集合(set1のみ)
    
    # 結果を新キーに保存
    SINTERSTORE dest set1 set2
    SUNIONSTORE dest set1 set2
    SDIFFSTORE dest set1 set2
    
    # イテレーション
    SSCAN myset 0 MATCH a* COUNT 10

ソート済みセット (Sorted Sets)

  • スコア付きのユニークな要素の集合です。

    # 追加(スコア付き)
    ZADD board 100 "alice" 85 "bob" 92 "charlie"
    
    # 条件付き追加
    ZADD board NX 80 "dave"      # 存在しない場合のみ
    ZADD board XX 95 "alice"     # 存在する場合のみ更新
    ZADD board GT 90 "alice"     # 現スコアより大きい場合のみ
    
    # スコア操作
    ZINCRBY board 10 "bob"       # スコア加算
    ZSCORE board "alice"         # スコア取得
    
    # 取得(昇順)
    ZRANGE board 0 -1              # 全メンバー
    ZRANGE board 0 -1 WITHSCORES   # スコア付き
    
    # 取得(降順)
    ZREVRANGE board 0 2            # トップ3
    
    # スコア範囲で取得
    ZRANGEBYSCORE board 80 100
    ZRANGEBYSCORE board -inf +inf LIMIT 0 10
    
    # 削除
    ZREM board "dave"
    ZREMRANGEBYSCORE board 0 50    # スコア範囲
    ZREMRANGEBYRANK board 0 1      # ランク範囲
    
    # カウント
    ZCARD board                    # 総数
    ZCOUNT board 80 100            # スコア範囲内の数

ランキング操作

  • スコアベースのランキング取得と集合演算です。

    # ランク取得(0始まり)
    ZRANK board "alice"            # 昇順ランク
    ZREVRANK board "alice"         # 降順ランク
    
    # ポップ
    ZPOPMIN board 1                # 最低スコアを取り出し
    ZPOPMAX board 1                # 最高スコアを取り出し
    BZPOPMIN board 30              # ブロッキング版
    
    # 集合演算
    ZUNIONSTORE dest 2 zset1 zset2
    ZINTERSTORE dest 2 zset1 zset2
    
    # 重み付き和集合
    ZUNIONSTORE dest 2 zset1 zset2 WEIGHTS 1 2
    
    # 集約方式の指定
    ZUNIONSTORE dest 2 zset1 zset2 AGGREGATE MAX
    
    # リーダーボード例
    ZADD game:leaderboard 1500 "player1"
    ZADD game:leaderboard 1800 "player2"
    ZINCRBY game:leaderboard 50 "player1"
    
    # トップ10取得
    ZREVRANGE game:leaderboard 0 9 WITHSCORES
    
    # 自分の順位確認
    ZREVRANK game:leaderboard "player1"
    
    # イテレーション
    ZSCAN board 0 MATCH a* COUNT 10

Pub/Sub & ストリーム

Pub/Sub

  • リアルタイムのメッセージ配信・購読です。

    # 購読(別ターミナルで実行)
    SUBSCRIBE channel1 channel2
    PSUBSCRIBE user:*          # パターン購読
    
    # 配信
    PUBLISH channel1 "Hello!"
    PUBLISH user:login "user123"
    
    # 購読解除
    UNSUBSCRIBE channel1
    PUNSUBSCRIBE user:*
    
    # 状態確認
    PUBSUB CHANNELS            # アクティブチャネル
    PUBSUB CHANNELS user:*     # パターンでフィルタ
    PUBSUB NUMSUB channel1     # 購読者数
    
    # 注意:
    # - fire-and-forget 方式
    # - 購読者がいない場合メッセージは消失
    # - 永続化が必要な場合は Streams を使用

ストリーム基本

  • イベントログやメッセージキューに最適なデータ構造です。

    # エントリ追加(* で自動ID生成)
    XADD mystream * sensor_id 1234 temp 19.8
    XADD mystream * sensor_id 1234 temp 20.1
    
    # 読み取り
    XLEN mystream                    # エントリ数
    XRANGE mystream - +              # 全件(古い順)
    XRANGE mystream - + COUNT 10     # 先頭10件
    XREVRANGE mystream + -           # 全件(新しい順)
    
    # XREAD: 複数ストリームから読み取り
    XREAD COUNT 5 STREAMS mystream 0
    
    # ブロッキング読み取り(新着を待機)
    XREAD COUNT 5 BLOCK 5000 STREAMS mystream $
    
    # トリミング
    XTRIM mystream MAXLEN 1000       # 最大1000件
    XTRIM mystream MAXLEN ~ 1000     # おおよそ1000件(高速)
    
    # 削除
    XDEL mystream 1526569495631-0
    
    # 情報
    XINFO STREAM mystream

コンシューマグループ

  • 複数ワーカーでストリームを分散処理する仕組みです。

    # グループ作成
    XGROUP CREATE mystream mygroup $ MKSTREAM
    # $: 新規エントリからのみ処理
    # 0: 既存エントリも含める
    
    # 未読エントリを取得(コンシューマ指定)
    XREADGROUP GROUP mygroup consumer1 \
      COUNT 1 STREAMS mystream >
    
    # 処理完了を通知(ACK)
    XACK mystream mygroup 1526569495631-0
    
    # 未確認エントリ一覧
    XPENDING mystream mygroup
    
    # 未確認エントリを別コンシューマに移譲
    XCLAIM mystream mygroup consumer2 \
      3600000 1526569495631-0
    # 3600000ms = 1時間以上処理されていないもの
    
    # グループ・コンシューマ情報
    XINFO GROUPS mystream
    XINFO CONSUMERS mystream mygroup
    
    # グループ削除
    XGROUP DESTROY mystream mygroup
    
    # コンシューマ削除
    XGROUP DELCONSUMER mystream mygroup consumer1

トランザクション & スクリプト

トランザクション

  • MULTI/EXEC による複数コマンドのアトミック実行です。

    # 基本トランザクション
    MULTI                       # 開始
    SET user:1:balance 100      # => QUEUED
    DECRBY user:1:balance 30    # => QUEUED
    INCRBY user:2:balance 30    # => QUEUED
    EXEC                        # 実行
    
    # トランザクション破棄
    MULTI
    SET key "value"
    DISCARD                     # キューをクリア
    
    # 楽観的ロック(WATCH)
    WATCH user:1:balance        # キーを監視
    GET user:1:balance
    MULTI
    SET user:1:balance 70
    EXEC                        # 監視中に変更されていたら nil
    
    UNWATCH                     # 全WATCHを解除
    
    # 注意:
    # - MULTI/EXEC はアトミック
    # - キュー中に値を読んで判断は不可
    # - read-modify-write には Lua スクリプトを推奨

Lua スクリプティング

  • サーバーサイドでアトミックな複合操作を実行します。

    # 基本
    EVAL "return 'Hello'" 0
    EVAL "return ARGV[1]" 0 "Hello"
    EVAL "return {KEYS[1], ARGV[1]}" 1 mykey myarg
    
    # Redis コマンドの呼び出し
    EVAL "return redis.call('GET', KEYS[1])" 1 mykey
    
    # 条件付き更新(アトミック)
    EVAL "
      local current = redis.call('GET', KEYS[1])
      if current == false then
        redis.call('SET', KEYS[1], ARGV[1])
        return 1
      end
      return 0
    " 1 mykey "default_value"
    
    # レートリミッター
    EVAL "
      local current = redis.call('INCR', KEYS[1])
      if current == 1 then
        redis.call('EXPIRE', KEYS[1], ARGV[1])
      end
      if current > tonumber(ARGV[2]) then
        return 0
      end
      return 1
    " 1 ratelimit:user123 60 100
    
    # スクリプトキャッシュ
    SCRIPT LOAD "return redis.call('GET', KEYS[1])"
    # => "SHA1ハッシュ"
    EVALSHA <sha1> 1 mykey      # キャッシュから実行
    
    # 管理
    SCRIPT EXISTS <sha1>
    SCRIPT FLUSH
    SCRIPT KILL

実用パターン

キャッシュ・ロック・レートリミッター

  • よく使われるRedisの実用パターンです。

    # ---- キャッシュ(Cache-Aside パターン)----
    SET cache:user:1001 '{"name":"Alice"}' EX 300
    # TTL 300秒。ミスしたらDBから取得→Redisにセット
    GET cache:user:1001
    # => キャッシュヒット or nil(ミス)
    
    # ---- 分散ロック ----
    # ロック取得(NXで排他、EXで自動解放)
    SET lock:resource "owner_id" NX EX 30
    # => OK(取得成功)or nil(既にロック中)
    
    # ロック解放(Luaでオーナー確認付き)
    EVAL "
      if redis.call('GET', KEYS[1]) == ARGV[1] then
        return redis.call('DEL', KEYS[1])
      end
      return 0
    " 1 lock:resource "owner_id"
    
    # ---- レートリミッター(固定ウィンドウ)----
    INCR ratelimit:api:user123
    EXPIRE ratelimit:api:user123 60
    # カウントが上限を超えたらリクエスト拒否
    
    # ---- レートリミッター(スライディングウィンドウ)----
    ZADD ratelimit:user123 <timestamp> <request_id>
    ZREMRANGEBYSCORE ratelimit:user123 0 <old_timestamp>
    ZCARD ratelimit:user123
    # カード数が上限を超えたらリクエスト拒否

セッション・リーダーボード・カウント

  • セッション管理、ランキング、ユニークカウントのパターンです。

    # ---- セッションストア ----
    HSET session:abc123 user_id 1001 \
      username "alice" role "admin"
    EXPIRE session:abc123 1800   # 30分で期限切れ
    HGETALL session:abc123       # セッション取得
    
    # ---- リーダーボード ----
    ZADD leaderboard 1500 "player1"
    ZADD leaderboard 1800 "player2"
    ZINCRBY leaderboard 50 "player1"
    ZREVRANGE leaderboard 0 9 WITHSCORES  # トップ10
    ZREVRANK leaderboard "player1"        # 順位
    
    # ---- ユニークカウント(HyperLogLog)----
    PFADD visitors:20260221 "user1" "user2" "user3"
    PFCOUNT visitors:20260221   # 概算ユニーク数
    # 誤差率 0.81%、メモリ最大12KB
    
    # 週間のマージ
    PFMERGE visitors:week \
      visitors:20260215 visitors:20260216 ...
    
    # ---- ビットマップ(日次アクティビティ)----
    SETBIT logins:user:1001:202602 20 1  # 20日目
    BITCOUNT logins:user:1001:202602     # 月間ログイン日数
    
    # ---- メッセージキュー(リストベース)----
    RPUSH queue:emails '{"to":"alice@example.com"}'
    BLPOP queue:emails 0    # ワーカーが無限待機

永続化 & 設定

データの永続化方式の比較です。

RDB (スナップショット)AOF (追記型ログ)

ポイントインタイムのスナップショット

全書き込み操作のログ

復旧が高速

復旧が低速(ログ再生)

最後のスナップショット以降のデータ損失リスク

everysec なら最大1秒分の損失

ファイルがコンパクト

ファイルが大きくなりがち

BGSAVE / SAVE

BGREWRITEAOF

推奨: バックアップ、災害復旧

推奨: 高いデータ耐久性が必要な場合

サーバー情報 & 設定

  • INFO, CONFIG, メモリ管理のコマンドです。

    # サーバー情報
    INFO                        # 全情報
    INFO server                 # サーバー情報
    INFO memory                 # メモリ使用状況
    INFO clients                # 接続クライアント
    INFO keyspace               # DB別のキー数
    INFO replication            # レプリケーション
    
    # 設定の確認・変更
    CONFIG GET maxmemory
    CONFIG SET maxmemory 256mb
    CONFIG SET maxmemory-policy allkeys-lru
    CONFIG REWRITE              # redis.confに保存
    
    # メモリ管理
    MEMORY STATS
    MEMORY DOCTOR               # 問題診断
    
    # クライアント管理
    CLIENT LIST                 # 接続一覧
    CLIENT SETNAME myapp
    CLIENT KILL ID 123
    
    # スローログ
    SLOWLOG GET 10              # 遅いコマンド10件
    SLOWLOG RESET
    
    # データベース管理
    DBSIZE                      # キー数
    FLUSHDB                     # 現DBの全キー削除
    FLUSHALL                    # 全DBの全キー削除

redis-cli ユーティリティ

統計 & 分析

  • redis-cli のパフォーマンス分析ツールです。

    # ローリング統計をリアルタイム表示
    redis-cli --stat
    
    # 大きなキーの検出
    redis-cli --bigkeys
    
    # レイテンシ測定
    redis-cli --latency
    redis-cli --latency-history
    redis-cli --latency-dist
    
    # システム固有のレイテンシ測定
    redis-cli --intrinsic-latency 5
    
    # キーのスキャン
    redis-cli --scan --pattern "user:*"
    
    # 全コマンドをリアルタイム表示(デバッグ用)
    redis-cli MONITOR

一括操作 & ユーティリティ

  • 一括処理やデータ転送の便利コマンドです。

    # コマンドファイルを一括投入(高速)
    redis-cli --pipe < commands.txt
    
    # リモートサーバーからRDBダンプ取得
    redis-cli --rdb /tmp/dump.rdb
    
    # Luaスクリプト実行
    redis-cli --eval script.lua key1 key2 , arg1 arg2
    
    # CSV形式で出力
    redis-cli --csv LRANGE mylist 0 -1
    
    # 繰り返し実行
    redis-cli --repeat 100 --interval 1 PING
    
    # 認証警告を抑制
    redis-cli --no-auth-warning -a password
    
    # 特定のDBを選択して接続
    redis-cli -n 2
    
    # 永続化操作
    redis-cli BGSAVE             # RDBスナップショット
    redis-cli BGREWRITEAOF       # AOF書き直し
    redis-cli LASTSAVE           # 最後の保存時刻

引用・参考リンク

Related Goods

  • Redisの技術的な仕組みから現場での活用まで実践的に解説。
キャッシュ、セッション管理、Pub/Subなど幅広いユースケースをカバーしています。
    Redisの技術的な仕組みから現場での活用まで実践的に解説。 キャッシュ、セッション管理、Pub/Subなど幅広いユースケースをカバーしています。
    詳細をみる
  • インメモリKVSであるRedisの基礎を体系的に学べる入門書。
データ構造やコマンドを丁寧に解説しています。
    インメモリKVSであるRedisの基礎を体系的に学べる入門書。 データ構造やコマンドを丁寧に解説しています。
    詳細をみる
  • ケーブルに取り付け可能なTypeCとLightningの変換アダプタです。
スタイリッシュなデザインで、Apple製品との相性抜群です。
    ケーブルに取り付け可能なTypeCとLightningの変換アダプタです。 スタイリッシュなデザインで、Apple製品との相性抜群です。
    詳細をみる
  • お気に入りのサウンドデバイスをすぐ取り出せる位置にディスプレイさせておくことができます。
    お気に入りのサウンドデバイスをすぐ取り出せる位置にディスプレイさせておくことができます。
    詳細をみる

WebTerm - Recommended tools

WebTermは、ブラウザでLinuxコマンド・Gitコマンドを安全に実行でき、チュートリアル式で学べるターミナルサンドボックスです。
AIコーディングツールの普及に伴い、CLIの基礎知識を身につける重要性は増しています。実際のターミナルを操作するのに抵抗がある方でも、WebTermはローカル環境を壊す心配がありません。「会員登録不要・無料」で利用でき、学習環境として最適です。

WebTerm Logo

WebTerm

Browser Terminal Sandbox for Learning CLI

開く

All Cheatsheets

エンジニア・プログラマー向けの便利なチートシートを多数まとめています(SP/Tablet/PC対応)
すべてのチートシートを見る