接続
CLI
redis-cli redis-cli -h 127.0.0.1 -p 6379 redis-cli -a password -n 2 redis-cli --tls -u rediss://user:pass@host:6380
ドライバー接続(Python)
import redis r = redis.Redis(host='localhost', port=6379, db=0) r.set('key', 'value') print(r.get('key'))
サーバー情報
PING -- returns PONG INFO server -- server details INFO memory -- memory usage DBSIZE -- number of keys in current db
文字列
基本操作
SET name "Alice" GET name SET counter 100 MSET a 1 b 2 c 3 MGET a b c
数値操作
INCR counter -- 101 INCRBY counter 10 -- 111 DECR counter -- 110 DECRBY counter 5 -- 105 INCRBYFLOAT price 2.5
文字列コマンド
SET key val文字列値を設定
GET key文字列値を取得
SETNX key valキーが存在しない場合のみ設定
SETEX key sec val秒単位の有効期限付きで設定
APPEND key val既存の値に追記
STRLEN key文字列値の長さ
リスト
リスト操作
LPUSH queue "first" RPUSH queue "last" LRANGE queue 0 -1 -- all elements LPOP queue RPOP queue
リストコマンド
LPUSH / RPUSHリストの左/右に追加
LPOP / RPOP左/右からポップ
LRANGE key start stop要素の範囲を取得
LLEN keyリストの長さ
LINDEX key idxインデックスの要素
LREM key count valvalのcount件を削除
BLPOP key timeoutブロッキングポップ(キュー用)
セットとソート済みセット
セット操作
SADD tags "python" "redis" "docker" SMEMBERS tags SISMEMBER tags "python" -- 1 (true) SREM tags "docker" SCARD tags -- count
セット演算
SUNION set1 set2 -- union SINTER set1 set2 -- intersection SDIFF set1 set2 -- difference
ソート済みセット操作
ZADD leaderboard 100 "Alice" 85 "Bob" ZRANGE leaderboard 0 -1 WITHSCORES ZREVRANGE leaderboard 0 2 ZSCORE leaderboard "Alice" ZRANK leaderboard "Alice" -- 0-based rank
ソート済みセットコマンド
ZADD key score memberスコア付きメンバーを追加
ZRANGE key start stopランク範囲(低→高)
ZREVRANGE key start stopランク範囲(高→低)
ZINCRBY key incr memberメンバーのスコアをインクリメント
ZRANGEBYSCORE key min maxスコア値による範囲
ZCARD keyメンバー数
ハッシュ
ハッシュ操作
HSET user:1 name "Alice" age 30 HGET user:1 name HGETALL user:1 HMSET user:2 name "Bob" age 25 HMGET user:1 name age
ハッシュコマンド
HSET key field valハッシュフィールドを設定
HGET key fieldハッシュフィールドを取得
HGETALL key全フィールドと値を取得
HDEL key fieldハッシュフィールドを削除
HEXISTS key fieldフィールドの存在確認
HINCRBY key field nフィールドの値をインクリメント
HKEYS key全フィールド名
HLEN keyフィールド数
キーと有効期限
キーコマンド
KEYS patternパターンに一致するキーを検索(低速)
SCAN cursor MATCH patキーをインクリメンタルに反復(安全)
EXISTS keyキーが存在するか確認
DEL keyキーを削除
TYPE keyキーのデータ型を取得
RENAME key newkeyキーをリネーム
有効期限コマンド
EXPIRE key 3600 -- expire in 1 hour PEXPIRE key 5000 -- expire in 5000 ms TTL key -- seconds until expiry PTTL key -- ms until expiry PERSIST key -- remove expiry
キーパターン
SET session:abc123 "data" EX 1800 -- EX = seconds, PX = milliseconds -- NX = only if not exists -- XX = only if exists SET lock:order42 "owner" NX EX 10
Pub/Sub
基本的なPub/Sub
-- Subscriber (terminal 1) SUBSCRIBE news alerts -- Publisher (terminal 2) PUBLISH news "Breaking: Redis 8 released"
パターンサブスクライブ
PSUBSCRIBE news.* -- matches news.tech, news.sports, etc.
Pub/Subコマンド
SUBSCRIBE channelチャンネルのメッセージを受信
PUBLISH channel msgチャンネルにメッセージを送信
PSUBSCRIBE patternパターンでサブスクライブ
UNSUBSCRIBE channel受信を停止
PUBSUB CHANNELSアクティブなチャンネルを一覧表示
トランザクション
MULTI / EXEC
MULTI SET balance:1 900 SET balance:2 1100 EXEC -- executes atomically
楽観的ロック
WATCH balance:1 val = GET balance:1 -- read current MULTI SET balance:1 (val - 100) EXEC -- EXEC returns nil if balance:1 changed
トランザクションコマンド
MULTIトランザクションブロックを開始
EXECキューに入ったコマンドを実行
DISCARDキューに入ったコマンドを破棄
WATCH keyキーの変更を監視(楽観的ロック)
UNWATCH全監視キーを解除
永続化
RDBスナップショット
SAVE -- synchronous snapshot BGSAVE -- background snapshot LASTSAVE -- timestamp of last save
AOF(追記専用ファイル)
appendonly yesredis.confでAOFを有効化
appendfsync always毎書き込みでfsync(最も安全、最も低速)
appendfsync everysec1秒ごとにfsync(推奨)
appendfsync noOSに任せる(最速、最もリスクあり)
永続化コマンド
CONFIG GET save CONFIG SET save "900 1 300 10" -- snapshot if 1 change in 900s or 10 in 300s BGREWRITEAOF -- rewrite AOF in background
よくあるパターン
分散ロック
SET lock:resource "owner-id" NX EX 30 -- NX = acquire only if not held -- EX 30 = auto-release after 30s DEL lock:resource -- explicit release
レートリミッター
key = "rate:user:42" INCR key EXPIRE key 60 -- 60-second window -- reject if GET key > max_requests
キャッシュパターン
val = GET "cache:user:1" if val is nil: val = fetch_from_db(1) SET "cache:user:1" val EX 300
セッションストレージ
HSET sess:abc uid 42 role "admin" EXPIRE sess:abc 1800 -- 30 min TTL HGETALL sess:abc