この記事の要点
• SET/GETが基本、EXPIREでTTL設定が必須
• 5つのデータ型(String/List/Hash/Set/Sorted Set)を用途で使い分け
• 本番ではKEYS *は厳禁、SCANを使う
概要
Redis はメモリ上で動作する高速な Key-Value ストアで、キャッシュ、セッション、レートリミット、キュー、Pub/Sub など幅広く使われます。本チートシートは redis-cli から実行する代表的コマンドを、Redis 7.x の公式ドキュメントに沿って整理しています。
接続と基本
| コマンド | 説明 |
|---|
redis-cli | ローカルの Redis に接続 |
redis-cli -h host -p 6379 | 任意ホスト/ポートに接続 |
redis-cli -a password | パスワード付きで接続 |
redis-cli --tls | TLS 接続 |
PING | 接続確認(PONG が返る) |
AUTH password | 認証 |
SELECT 0 | DB インデックス選択(0-15) |
INFO | サーバ情報 |
DBSIZE | 現在 DB のキー数 |
FLUSHDB | 現在 DB を全削除 |
FLUSHALL | 全 DB を全削除 |
注意: FLUSHALLは全DBの全キーを削除します。本番環境では絶対に実行しないでください。FLUSHDBも現在のDB全体が消えるので要注意です。
キー操作
| コマンド | 説明 |
|---|
KEYS pattern | パターンに合うキー一覧(本番では非推奨) |
SCAN cursor MATCH pat COUNT n | カーソル反復(本番用) |
EXISTS key [key ...] | キーの存在確認 |
DEL key [key ...] | キー削除 |
UNLINK key [key ...] | 非同期削除(推奨) |
TYPE key | 値の型 |
RENAME key newkey | リネーム |
EXPIRE key seconds | 有効期限(秒) |
PEXPIRE key ms | 有効期限(ミリ秒) |
EXPIREAT key unixtime | 絶対時刻で期限 |
TTL key | 残り秒数 |
PERSIST key | 期限を除去 |
RANDOMKEY | ランダムなキー |
ポイント: SCANはカーソルベースの安全な反復。KEYS *はO(N)でRedisをブロックするため、本番では絶対にSCANを使いましょう。
文字列(String)
| コマンド | 説明 |
|---|
SET key value | 値を設定 |
SET key value EX 60 | 60 秒の TTL 付きで設定 |
SET key value NX | キーが無い場合のみ設定 |
SET key value XX | キーが有る場合のみ設定 |
GET key | 値を取得 |
MSET k1 v1 k2 v2 | 複数セット |
MGET k1 k2 | 複数取得 |
GETSET key value | 旧値を返して更新(非推奨、SET ... GET) |
APPEND key value | 末尾に追記 |
STRLEN key | 文字列長 |
INCR key | 1 加算 |
INCRBY key n | n 加算 |
DECR key | 1 減算 |
INCRBYFLOAT key f | 浮動小数加算 |
GETRANGE key start end | 部分文字列 |
SETRANGE key offset value | 部分書き換え |
実践メモ: SET key value EX 60 NXで「キーが無い場合のみ60秒TTLで設定」。分散ロックやキャッシュのスタンピード対策に使えます。
リスト(List)
| コマンド | 説明 |
|---|
LPUSH key v [v...] | 先頭に追加 |
RPUSH key v [v...] | 末尾に追加 |
LPOP key [count] | 先頭取り出し |
RPOP key [count] | 末尾取り出し |
LRANGE key 0 -1 | 全要素取得 |
LLEN key | 長さ |
LINDEX key i | インデックス指定取得 |
LSET key i value | インデックス指定で更新 |
LREM key count value | 値を削除 |
LTRIM key start stop | 範囲外を削除 |
BLPOP key timeout | ブロッキング LPOP |
BRPOP key timeout | ブロッキング RPOP |
LMOVE src dst LEFT RIGHT | 要素を移動 |
ハッシュ(Hash)
| コマンド | 説明 |
|---|
HSET key f v [f v...] | フィールドを設定 |
HGET key f | 取得 |
HMGET key f1 f2 | 複数取得 |
HGETALL key | 全フィールド取得 |
HDEL key f [f...] | フィールド削除 |
HEXISTS key f | フィールド存在確認 |
HKEYS key | フィールド名一覧 |
HVALS key | 値一覧 |
HLEN key | フィールド数 |
HINCRBY key f n | 整数加算 |
HINCRBYFLOAT key f f | 浮動小数加算 |
HSCAN key cursor | カーソル反復 |
セット(Set)
| コマンド | 説明 |
|---|
SADD key m [m...] | 要素を追加 |
SREM key m | 要素を削除 |
SMEMBERS key | 全要素 |
SISMEMBER key m | 所属確認 |
SMISMEMBER key m1 m2 | 複数所属確認 |
SCARD key | 要素数 |
SUNION k1 k2 | 和集合 |
SINTER k1 k2 | 積集合 |
SDIFF k1 k2 | 差集合 |
SRANDMEMBER key [n] | ランダム要素 |
SPOP key [n] | ランダム取り出し |
ポイント: ハッシュ(Hash)はユーザープロフィールなど「1エンティティの複数フィールド」を格納するのに最適。キー1つで管理でき、メモリ効率も良いです。
ソート済みセット(Sorted Set)
| コマンド | 説明 |
|---|
ZADD key score member | 要素を追加 |
ZADD key NX/XX/GT/LT score member | 条件付き追加 |
ZRANGE key 0 -1 WITHSCORES | スコア昇順 |
ZRANGE key 0 -1 REV | 降順 |
ZRANGEBYSCORE key min max | スコア範囲 |
ZRANGEBYLEX key min max | 辞書順範囲 |
ZRANK key member | 昇順ランク |
ZREVRANK key member | 降順ランク |
ZSCORE key member | スコア取得 |
ZINCRBY key n member | スコア加算 |
ZCARD key | 要素数 |
ZCOUNT key min max | スコア範囲の件数 |
ZREM key member | 要素を削除 |
ZPOPMIN key [n] | 最小スコアを取り出す |
ZPOPMAX key [n] | 最大スコアを取り出す |
Pub/Sub
| コマンド | 説明 |
|---|
PUBLISH channel message | メッセージ送信 |
SUBSCRIBE channel | チャンネル購読 |
UNSUBSCRIBE [channel] | 購読解除 |
PSUBSCRIBE pattern | パターン購読 |
PUBSUB CHANNELS | アクティブチャンネル一覧 |
PUBSUB NUMSUB [ch...] | 購読者数 |
Streams(簡易)
| コマンド | 説明 |
|---|
XADD stream * key value | エントリ追加 |
XLEN stream | 長さ |
XRANGE stream - + | 全件取得 |
XREAD COUNT 10 STREAMS stream 0 | 読み出し |
XGROUP CREATE stream grp $ | コンシューマグループ作成 |
XREADGROUP GROUP grp cons COUNT 1 STREAMS stream > | グループ読み |
XACK stream grp id | ACK |
トランザクション / スクリプト
| コマンド | 説明 |
|---|
MULTI | トランザクション開始 |
EXEC | 実行 |
DISCARD | 破棄 |
WATCH key | 楽観ロック |
EVAL script numkeys key... arg... | Lua スクリプト実行 |
EVALSHA sha1 ... | キャッシュされたスクリプト実行 |
SCRIPT LOAD script | スクリプトを事前ロード |
実践メモ: Sorted Setはランキング実装の定番。ZADDでスコア付き追加、ZREVRANGEで上位取得。リアルタイムランキングボードに最適です。
注意: Pub/Subはメッセージを永続化しません。購読者がいない間のメッセージは失われます。永続性が必要ならStreamsを使いましょう。
実用スニペット集
| ユースケース | コマンド |
|---|
| キャッシュ書き込み(TTL 付き) | SET user:42 "{\"name\":\"Ada\"}" EX 300 |
| レートリミット(固定ウィンドウ) | INCR rl:ip:1.2.3.4
EXPIRE rl:ip:1.2.3.4 60 NX |
| 分散ロック(単純版) | SET lock:job1 token NX EX 10 # 解放は Lua で値を検証してから DEL |
| ランキング | ZADD scores 120 alice 95 bob 140 carol
ZREVRANGE scores 0 9 WITHSCORES
ZREVRANK scores alice |
| 最近使ったアイテム(LRU 風) | LPUSH recent:42 "item-9"
LTRIM recent:42 0 19 |
| セッションハッシュ | HSET sess:abc user 42 ip 1.2.3.4 ts 1712700000
EXPIRE sess:abc 3600 |
| ユニーク訪問者集計(HyperLogLog) | PFADD uv:2026-04-12 user1 user2 user3
PFCOUNT uv:2026-04-12
PFMERGE uv:week uv:2026-04-06 uv:2026-04-07 ... |
| ビットマップによる出席管理 | SETBIT present:2026-04-12 42 1
GETBIT present:2026-04-12 42
BITCOUNT present:2026-04-12 |
| 本番で安全にキーを探す | SCAN 0 MATCH "user:*" COUNT 1000 |
| パイプライン(redis-cli) | printf "SET a 1\nSET b 2\nINCR a\n" | redis-cli --pipe |
| キー削除をバッチで | redis-cli --scan --pattern "tmp:*" | xargs -n 100 redis-cli UNLINK |
| Pub/Sub 受信 | SUBSCRIBE news # 別クライアントから: PUBLISH news "hello" |
| 楽観的トランザクション | WATCH counter
val = GET counter
MULTI
SET counter (val+1)
EXEC |
| Lua スクリプトで原子的処理 | EVAL "if redis.call('GET', KEYS[1]) == ARGV[1] then return redis.call('DEL', KEYS[1]) else return 0 end" 1 lock:job1 token |
| 永続化の手動実行 | BGSAVE (RDB スナップショット)
BGREWRITEAOF (AOF 書き換え)
LASTSAVE (最終保存時刻) |
redis-cli フラグ早見表
| フラグ | 説明 |
|---|
-h host | ホスト |
-p port | ポート |
-a pass | パスワード |
-n db | DB 番号 |
--tls | TLS 接続 |
-r n -i sec cmd | 繰り返し実行 |
--scan --pattern pat | パターンで SCAN |
--pipe | パイプモード(一括流し込み) |
--latency | 遅延測定 |
--stat | 統計モニタ |
MONITOR | 全コマンドをリアルタイム監視 |
トラブルシューティング
| 状況 | 原因 / 対処 |
|---|
(error) NOAUTH | 認証が必要。AUTH またはクライアント設定 |
(error) OOM command not allowed | maxmemory 到達。maxmemory-policy と期限を見直す |
KEYS で応答が止まる | O(N) でブロック。SCAN を使う |
| 期限が消えない | PERSIST か、SET 時の KEEPTTL 考慮 |
| Pub/Sub で取りこぼし | Pub/Sub は非永続。必要なら Streams に移行 |
| レプリカが追いつかない | replica-read-only、帯域・repl-backlog を確認 |
Tips
- 本番では
KEYS * を絶対に使わず、SCAN を使う。
- 大きなキー削除は
DEL より UNLINK のほうが安全(非同期)。
- 重要データは AOF(everysec)+ RDB を併用して永続化する。
- キー名は
user:42:profile のように : 区切りの階層命名が一般的。
- TTL を必ず設計する(期限のないキャッシュはメモリ枯渇の元)。
- 複数コマンドの原子性が必要なら
MULTI/EXEC か Lua スクリプトを使う。
サーバ管理
| コマンド | 説明 |
|---|
CONFIG GET parameter | 設定値を取得 |
CONFIG SET parameter value | 設定値を変更 |
CONFIG REWRITE | 現在の設定を設定ファイルへ書き戻し |
CLIENT LIST | 接続中クライアント一覧 |
CLIENT KILL addr | クライアント切断 |
SLOWLOG GET n | スロークエリ |
LATENCY LATEST | 最新レイテンシイベント |
MEMORY USAGE key | キーのメモリ使用量 |
MEMORY STATS | メモリ統計 |
DEBUG SLEEP sec | 遅延シミュレーション(検証用) |
| `SHUTDOWN [NOSAVE | SAVE]` |
TIME | サーバ時刻 |
ROLE | レプリカ構成を表示 |
レプリケーション / クラスタ
| コマンド | 説明 |
|---|
REPLICAOF host port | レプリカ化 |
REPLICAOF NO ONE | マスター昇格 |
INFO replication | レプリカ情報 |
CLUSTER NODES | クラスタノード一覧 |
CLUSTER INFO | クラスタ状態 |
CLUSTER SLOTS | スロット割当 |
CLUSTER KEYSLOT key | キーのスロット番号 |
redis-cli --cluster create host:port ... | クラスタ構築 |
redis-cli --cluster check host:port | クラスタ検査 |
クライアントコード(Node.js: node-redis 例)
import { createClient } from "redis";
const client = await createClient({ url: "redis://localhost:6379" })
.on("error", (e) => console.error(e))
.connect();
await client.set("k", "v", { EX: 60 });
const v = await client.get("k");
const multi = client.multi();
multi.incr("count");
multi.expire("count", 3600);
const results = await multi.exec();
await client.quit();
クライアントコード(Python: redis-py 例)
import redis
r = redis.Redis(host="localhost", port=6379, decode_responses=True)
r.set("k", "v", ex=60)
print(r.get("k"))
with r.pipeline() as pipe:
pipe.incr("count").expire("count", 3600)
pipe.execute()
キャッシュ設計のポイント
| 項目 | 推奨 |
|---|
| TTL | 必ず設定する。無期限は慎重に |
| キー命名 | domain:entity:id[:attr] 形式で階層化 |
| 大きい値 | 100KB 以上は分割や別ストアを検討 |
| N+1 防止 | MGET や Pipeline を活用 |
| スタンピード対策 | ランダム TTL、単一フライト、early refresh |
| 永続化 | AOF(everysec) + RDB を併用 |
設定ファイル抜粋(redis.conf)
代表的な項目のみ挙げます。実際の値は環境に合わせて調整してください。
| 項目 | 説明 |
|---|
bind 127.0.0.1 | 接続を受け付ける IP |
port 6379 | ポート |
requirepass yourpass | パスワード |
maxmemory 2gb | 使用メモリ上限 |
maxmemory-policy allkeys-lru | 退避ポリシー |
appendonly yes | AOF 有効 |
appendfsync everysec | AOF フラッシュ頻度 |
save 900 1 | RDB スナップショット条件 |
tcp-keepalive 300 | TCP keepalive |
tls-port 6380 | TLS ポート |
退避(eviction)ポリシー
| ポリシー | 説明 |
|---|
noeviction | 書き込み時にエラーを返す(既定) |
allkeys-lru | 全キーから LRU で退避 |
allkeys-lfu | 全キーから LFU で退避 |
volatile-lru | 期限付きキーから LRU で退避 |
volatile-lfu | 期限付きキーから LFU で退避 |
allkeys-random | ランダム退避 |
volatile-ttl | TTL の短いものから退避 |
モニタリングコマンド
| 用途 | コマンド |
|---|
| 現在の統計を 1 秒ごとに表示 | redis-cli --stat |
| レイテンシの最悪値 | redis-cli --latency |
| 継続計測 | redis-cli --latency-history -i 5 |
| 全コマンドの可視化(本番で多用禁止) | redis-cli MONITOR |
| メモリの概況 | redis-cli INFO memory |
キー使用量の上位を取る
| 用途 | コマンド |
|---|
| 各型で最大のキー | redis-cli --bigkeys |
| メモリ使用量で上位 | redis-cli --memkeys |
| ホットキー検出 | redis-cli --hotkeys |
Keyspace 通知
| 用途 | コマンド |
|---|
| 有効化(K=イベント、E=キー) | redis-cli CONFIG SET notify-keyspace-events KEA |
| 変更を購読 | redis-cli PSUBSCRIBE '__keyspace@0__:*' |
参考リソース
この技術を体系的に学びたいですか?
未来学では東証プライム上場企業のITエンジニアが24時間サポート。月額24,800円から、退会金0円のオンラインIT塾です。
メールで無料相談する
← 一覧に戻る