FrontPage  Index  Search  Changes  RSS  Login

[KVS][Redis] Redis コマンド一覧

概要

Redis で利用可能なコマンドを、公式ドキュメントからメモ。

注記

  • ドキュメントの完全な和訳を目指している訳ではなく、メモを取りつつコマンドの概要をつかむ事が目的
  • 原則として、コマンドのサンプルは、先頭から順に行ったものとする
    • サーバに格納されているデータは、各コマンドのセクション間で引き継ぐものとする
    • 引き継いでいない場合は、サンプル中でデータを準備するところから行っている
  • コマンドリファレンスの引数の記法(意味)は、説明文中に補足がない場合は以下の通り
    • <key> = キー
    • <bytes> = 送信するデータのバイト数
    • <data> = 送信するデータ(String)
    • <srckey> = 操作元のキー
    • <dstkey> = 操作先のキー
    • <member> = 操作対象のメンバー
  • 公式ドキュメント内で string と記されている引数部分は、自分の理解力の都合上、本文書中では <bytes> と <data> に分けて記載しています

接続の取り扱い

QUIT

QUIT

サーバとの接続を切断する。

$ telnet localhost 6379
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying fe80::1...
telnet: connect to address fe80::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
QUIT
Connection closed by foreign host.

AUTH

AUTH <password>
  • パスワード保護された Redis サーバは、コマンドを発行する前にパスワードを要求する
    • 接続してから一度も AUTH に成功していない場合、および AUTH に失敗してから一度も成功していない場合に AUTH が要求される
  • サーバのパスワード保護は、設定ファイルの requirepass ディレクティブで行う
  • (TODO: 暗号化については不明)
SET foo 3
bar
-ERR operation not permitted
AUTH foobared
+OK
SET foo 3
bar
+OK
AUTH foobare
-ERR
redis.conf
$ diff -u redis.conf.orig redis.conf
--- redis.conf.orig     2009-11-11 21:53:43.000000000 +0900
+++ redis.conf  2009-11-11 21:53:46.000000000 +0900
@@ -76,7 +76,7 @@
 # This should stay commented out for backward compatibility and because most
 # people do not need auth (e.g. they run their own servers).

-# requirepass foobared
+requirepass foobared

 ################################### LIMITS ####################################

※ これ以降、パスワード保護は無効にしているものとする

String 型データの操作

SET

SET <key> <bytes>
<data>
  • 指定したキー(<key>)に紐づけて指定バイト数(<bytes>)のデータ(<data>)を格納する
  • O(1)
SET foo 3
bar
+OK

GET

GET <key>
  • 指定したキー(<key>)に紐づけて格納されたデータのバイト数とデータ自身を受け取る
  • O(1)
GET foo
$3
bar

GETSET

GETSET <key> <bytes>
<data>
  • 指定したキー(<key>)にデータが格納されていれば、そのデータを指定したバイト数(<bytes>)のデータ(<data>)で置き換え、元のデータを受け取る
  • コマンド指定は SET コマンドと同じ
  • 指定したキーが存在しなければ、SET は成功するが "$-1" が返る
  • String は 1GB を超えられない
  • O(1)
GETSET foo 5
12345
$3
bar
GET foo
$5
12345
GETSET hoge 3
bar
GETSET hoge 3
bar
$-1
GET hoge
$3
bar

MGET

MGET <key 1> <key 2> ... <key N>
  • 指定した任意個のキー(<key N>)に紐づけて格納されているデータを受け取る
  • 指定したキーの中に存在しないキーが含まれていれば、対応するリプライが "$-1" となる
  • 各キーについて O(1)
MGET foo hoge
*2
$5
12345
$3
bar
MGET foo bar
*2
$5
12345
$-1

SETNX

SETNX <key> <bytes>
<data>
  • 指定したキーに紐づけてデータが格納されていない場合のみ、指定バイト数のデータを格納する
  • キーが存在していれば何もしない
  • "SET if Not eXists" の意味
  • キーが存在していなくてデータを格納したなら ":1" が返る
  • キーが存在していてデータを格納しなかったなら ":0" が返る
  • O(1)
SETNX newone 3
bar
:1
SETNX foo 3
bar
:0
GET newone
$3
bar
GET foo
$5
12345

INCR

INCR <key>
  • 指定したキーに紐づけて格納されている値を 1 増加させる
  • キーが存在しなければ、0 が格納されていたものとして扱う
  • O(1)
INCR i
:1
INCR i
:2
INCR foo
:12346

INCRBY

INCRBY <key> <integer>
  • 指定したキーに紐づけて格納されている値を指定した数値(<integer>)だけ増加させる
  • キーが存在しなければ、0 が格納されていたものとして扱う
  • O(1)
INCRBY j 2
:2
INCRBY j 3
:5

DECR

DECR <key>

  • 指定したキーに紐づけて格納されている値を 1 減少させる
  • キーが存在しなければ、0 が格納されていたものとして扱う
  • O(1)
DECR j
:4
DECR k
:-1

※ ドキュメントでは "DECR <key> <integer>" となっていたが、実際は DECR で数値指定はできない

DECR j 2
-ERR wrong number of arguments

DECRBY

DECRBY <key> <integer>

  • 指定したキーに紐づけて格納されている値を指定した数値(<integer>)だけ減少させる
  • キーが存在しなければ、0 が格納されていたものとして扱う
  • O(1)
DECRBY j 2
:2

EXISTS

EXISTS <key>
  • 指定したキーが存在するか調べる
  • キーが存在するなら ":1" が返る
  • キーが存在しないなら ":0" が返る
  • O(1)
EXISTS foo
:1
EXISTS nokey
:0

DEL

DEL <key>
  • 指定したキーを削除し、":1" を返す
  • 指定したキーが存在しなければ何もしないが、":0" を返す
  • 常に成功を返す(リプライは常に ":1" か ":0")
  • O(1)
DEL foo
:1
DEL nokey
:0

TYPE

TYPE <key>
  • 指定したキーに紐づけられたデータの型を返す
  • キーが存在していれば "+string", "+list", "+set" のいずれかを返す
  • キーが存在しなければ "+none" を返す
  • O(1)
TYPE nokey
+none
TYPE i
+string

キー空間の操作

KEYS

KEYS <pattern>
  • 指定したグロブスタイルパターン(<pattern>)にマッチする、サーバに存在するキーを返す
  • グロブスタイル
    • ?: 任意の 1 文字
    • *: 任意の 0 文字以上
  • リプライはデータのバイト数とマッチしたキーを空白で結合した文字列データ
  • 指定パターンにマッチしなければ、長さ 0 と空行が返る
  • O(n)
    • n はデータベース内のキーの数と、キーとパターンの長さに依存する
SET hello 3
bar
+OK
SET hallo 3
bar
+OK
SET hhllo 3
bar
+OK
SET heeeello 3
bar
+OK
KEYS h?llo
$17
hallo hello hhllo
KEYS h*llo
$26
hallo heeeello hello hhllo
KEYS hallo
$5
hallo
KEYS halllo
$0

RANDOMKEY

RANDOMKEY
  • 現在利用中のデータベースからランダムに選択したキーを返す
  • O(1)
RANDOMKEY
+hello

RENAME

RENAME <old key> <new key>
  • 指定した変更前のキー(<old key>)を指定した変更後のキー(<new key>)にリネームする
  • 変更前のキーと変更後のキーが同じ場合、エラーを返す
  • 変更後のキーが存在している場合、存在するキーに上書きする
  • O(1)
SET foo 3
bar
+OK
SET hoge 4
fuga
+OK
RENAME foo foofoo
+OK
GET foofoo
$3
bar
GET foo
$-1
RENAME hoge foofoo
+OK
GET foofoo
$4
fuga
RENAME foofoo foofoo
-ERR source and destination objects are the same

RENAMENX

RENAMENX <old key> <new key>
  • RENAME と同じだが、変更後のキーが存在する場合は何もせず ":0" が返る
  • リネームが行われた場合は ":1" が返る
  • O(1)
RENAMENX foofoo foo
:1
RENAMENX hello foo
:0
GET foo
$4
fuga
GET hello
$3
bar

DBSIZE

DBSIZE
  • 現在選択しているデータベースに存在するキーの数を返す
DBSIZE
:9
KEYS *
$43
k newone hallo heeeello foo hello hhllo i j

EXPIRE

EXPIRE <key> <second>
EXPIREAT <key> <unixtime> (Redis >= 1.1)
  • 指定したキーがタイムアウトする秒数(<second>)を設定する
  • 既にタイムアウトの設定が行われているキーに対して EXPIRE を発行すると何もせず ":0" を返す
  • タイムアウトの設定は、値が変更されたときに取り消される
  • O(1)
GET k
$2
-1
EXPIRE k 10
:1
GET k
$2
-1
... 10 seconds after ...
GET k
$-1

TTL

TTL <key>
  • 指定したキーのタイムアウトまでの秒数を返す
  • タイムアウトが設定されていなければ ":-1" を返す
  • O(1)
EXPIRE j 100
:1
TTL j
:31
TTL j
:28
TTL i
:-1

List 型データの操作

RPUSH

RPUSH <key> <bytes>
<data>
  • 指定したキーの List 型データの末尾に指定バイト数のデータを追加する
  • キーが存在しなければ、空の List を作った後で追加する
  • O(1)
RPUSH l 1
b
+OK
RPUSH l 1
a
+OK
LLEN l
:2
LRANGE l 0 1
*2
$1
b
$1
a

LPUSH

LPUSH <key> <bytes>
<data>
  • 指定したキーの List 型データの先頭に指定バイト数のデータを追加する
  • キーが存在しなければ、空の List を作った後で追加する
  • O(1)
LPUSH l 1
c
+OK
LPUSH l 1
d
+OK
LLEN l
:4
LRANGE l 0 4
*4
$1
d
$1
c
$1
b
$1
a

LLEN

LLEN <key>
  • 指定したキーに格納されている List の長さを返す
  • キーが存在しなければゼロを返す
  • キーに格納されているのが List でなければエラーを返す
  • O(1)
LLEN l
:4
LLEN r
:0
GET foo
$4
fuga
LLEN foo
-ERR Operation against a key holding the wrong kind of value

LRANGE

LRANGE <key> <start index> <end index>
  • 指定したキーに格納されている List から、指定した開始位置(<start index>)から終端位値(<end index>)
  • 位置(インデックス)は 0 から始まる
  • インデックスに負を指定すると、末尾から数えた位置で指定できる(末尾は -1)
  • O(n)
    • n は要素数に依存する
LRANGE l 0 2
*3
$1
d
$1
c
$1
b
LRANGE l 0 -1
*4
$1
d
$1
c
$1
b
$1
a

LTRIM

LTRIM <key> <start index> <end index>
  • 指定した存在するキーに格納されている List を、指定した範囲に切り詰める
  • O(n)
    • n は List の長さから指定範囲の長さを引いた数に依存する
LRANGE l 0 -1
*4
$1
d
$1
c
$1
b
$1
a
LTRIM l 2 3
+OK
LRANGE l 0 - 1
-ERR wrong number of arguments
LRANGE l 0 -1
*2
$1
b
$1
a

LINDEX

LINDEX <key> <index>
  • 指定したキーに格納されている List の、指定したインデックスの位置にある要素を返す
  • O(n)
    • n は List の長さに依存する
LINDEX l 0
$1
b

LSET

LSET <key> <index> <bytes>
<data>
  • 指定したキーの List の指定インデックス位置を、指定した長さのデータで置き換える
  • 範囲外のインデックスを指定した場合はエラー
  • O(n)
    • n は List の長さに依存する
LSET l 1 10
1234567890
+OK
LRANGE l 0 -1
*2
$1
b
$10
1234567890
LSET l 3 1
a
-ERR index out of range

LREM

LREM <key> <count> <bytes>
<data>
  • 指定したキーに格納されている List から、先頭から数えていって指定した数(<count>)の分だけ、指定した値を削除する
  • 数がゼロの場合は全て削除
  • 数が負の場合は末尾から数える
  • 削除した数を返す
  • O(n)
    • n は List の長さに依存する
LPUSH x 1
b
+OK
LPUSH x 1
a
+OK
LPUSH x 1
b
+OK
LPUSH x 1
b
+OK
LREM x 2 1
a
:2
LRANGE x 0 -1
*3
$1
b
$1
b
$1
b
LREM x -2 1
b
:2
LRANGE x 0 -1
*1
$1
b

LPOP

LPOP <key>
  • 指定したキーに格納された List の先頭を返す
  • キーが存在しないか空の List だった場合は nil が返る
  • O(1)
RPUSH y 1
a
+OK
RPUSH y 1
b
+OK
LPOP y
$1
a
LPOP y
$1
b
LPOP y
$-1

RPOP

RPOP <key>
  • 指定したキーに格納された List の先頭を返す
  • キーが存在しないか空の List だった場合は nil が返る
  • O(1)
RPUSH y 1
a
+OK
RPUSH y 1
b
+OK
RPOP y
$1
b
RPOP y
$1
a
RPOP y
$-1

RPOPLPUSH (Redis >= 1.1)

RPOPLPUSH <srckey> <dstkey>
  • 指定したキー srckey に格納されたリストの末尾の要素を取り出して(RPOP)、指定したキー dstkey に格納されたリストの先頭に追加する
  • 指定したキーが存在しないか、空のリストである場合は nil を返す
  • 同一キーを指定した場合にローテーションとなる
  • O(1)
  • "ef3ac64a27519c65370fbe6877c514e58a29d644" を make して試したが、期待通りに動いていなかったのでサンプルは略

Set 型データの操作

SADD

SADD <key> <member>
  • 指定したキーに格納された Set に指定メンバー(<member>)を追加する
  • Set 内に存在しているメンバーが指定された場合は何もしない
  • 指定したキーが存在しない場合は新たに Set を作成する
  • 指定したキーが存在していて、Set でない値ならエラーを返す
  • O(1)
SADD p 1
a
:1
SADD p 1
b
:1
SMEMBERS p
*2
$1
a
$1
b

SREM

SREM <key> <member>
  • 指定したキーに格納された Set から、指定されたメンバーを削除する
  • 指定したメンバーが存在しなければ何もしない
  • 指定したキーが存在していて、Set でない値ならエラーを返す
  • O(1)
SREM p 1
b
:1
SMEMBERS p
*1
$1
a
SREM p 1
c
:0
SMEMBERS p
*1
$1
a

SPOP

SPOP <key>
  • (コマンド個別のドキュメントなし)
  • 指定したキーに格納された Set からランダムに要素を取り出す
SPOP q
$1
a
SMEMBERS q
*1
$1
x

SMOVE

SMOVE <srckey> <dstkey> <member>
  • 指定した srckey の Set から dstkey の Set に、指定したメンバーを移動する
  • srckey が存在しないか、そこにメンバーが存在しなければ、何もしない
  • 成功したら 1 が返る
  • O(1)
SADD q 1
x
:1
SMOVE p q 1
a
:1
SMOVE p q 1
b
:0
SMEMBERS p
*0
SMEMBERS q
*2
$1
x
$1
a

SCARD

SCARD <key>
  • Set のカーディナリティを返す
  • キーが存在しなければ 0 を返す
  • O(1)
SCARD p
:0
SCARD q
:2
SCARD no
:0

SISMEMBER

SISMEMBER <key> <member>
  • 指定したキーに指定したメンバーが存在すれば 1 を返す
  • O(1)
SMEMBERS q
*2
$1
x
$1
a
SISMEMBER q 1
a
:1
SISMEMBER q 1
b
:0

SINTER

SINTER <key 1> <key 2> ... <key N>
  • 指定した全ての集合の交差を返す
  • O(N*M)
    • 最悪のケースで、N は最小の Set のカーディナリティで、M は Set の数
SADD p 1
a
:1
SMEMBERS p
*1
$1
a
SMEMBERS q
*2
$1
x
$1
a
SINTER p q
*1
$1
a

SINTERSTORE

SINTERSTORE <dstkey> <key 1> <key 2> ... <key N>
  • SINTER 同様の処理を行うが、結果を返さずに dstkey に格納する
  • O(N*M)
    • 最悪のケースで、N は最小の Set のカーディナリティで、M は Set の数
SINTERSTORE t p q
:1
SMEMBERS t
*1
$1
a

SUNION

SUNION <key 1> <key 2> ... <key N>
  • 指定した Set の全てのメンバーを結合する
  • O(N)
    • N は指定した全ての Set のメンバーの総数
SUNION p q
*2
$1
x
$1
a

SUNIONSTORE

SUNIONSTORE <dstkey> <key 1> <key 2> ... <key N>
  • SUNION 同様の処理を行うが、結果を返さずに dstkey に格納する
  • O(N)
    • N は指定した全ての Set のメンバーの総数
SUNIONSTORE r p q
:2
SMEMBERS r
*2
$1
x
$1
a

SDIFF

SDIFF <key 1> <key 2> ... <key N>
  • 指定した最初の Set と、以降に続く Set との差分を返す
  • O(N)
    • N は指定した全ての Set のメンバーの総数
SMEMBERS p
*1
$1
a
SMEMBERS q
*2
$1
x
$1
a
SDIFF p q
*0
SDIFF q p
*1
$1
x

SDIFFSTORE

SDIFFSTORE <dstkey> <key 1> <key 2> ... <key N>
  • SDIFF 同様の処理を行うが、結果を返さずに dstkey に格納する
  • O(N)
    • N は指定した全ての Set のメンバーの総数
SDIFFSTORE qq q p
:1
SMEMBERS qq
*1
$1
x

SMEMBERS

  • 指定したキーに格納された Set の全メンバーを返す
  • O(N)
SMEMBERS q
*2
$1
x
$1
a

SRANDMEMBER

SRANDMEMBER <key>
  • (コマンド個別のドキュメントなし)
  • unknown command
  • 指定したキーに格納された Set からランダムにメンバーを返す
SRANDMEMBER q
-ERR unknown command

順序付き Set 型データの操作(Version 1.1 以降)

ZADD

ZADD <key> <score> <member>

ZREM

ZREM <key> <member>

ZRANGE

ZRANGE <key> <start> <end>

ZREVRANGE

ZREVRANGE <key> <start> <end>

ZRANGEBYSCORE

ZRANGEBYSCORE <key> <min> <max>

ZCARD

ZCARD <key>

ZSCORE

ZSCORE <key>

複数のデータベースの取り扱い

SELECT

SELECT <index>
  • 指定した 0 始まりのインデックス(番号)のデータベースを選択する
  • 新規接続の際には、自動的に DB 0 が選択される

MOVE

MOVE <key> <dbindex>
  • 指定したキーを指定したデータベース(<dbindex>)に移動する
  • 成功したら 1 を返す
  • 指定データベースに既に存在するキーであったり、現在のデータベースに存在しないキーであった場合は 0 を返す

FLUSHDB

FLUSHDB
  • 現在のデータベースから全てのキーを削除する
  • 必ず成功する

FLUSHALL

FLUSHALL
  • 全てのデータベースから全てのキーを削除する
  • 必ず成功する

ソート

SORT

SORT <key> BY <pattern> LIMIT <start> <end> GET <pattern> ASC|DESC ALPHA
  • List か Set を並び替える
  • 標準で数値基準の並び替え

永続化の制御

SAVE

SAVE
  • ディスク上のデータベースに保存する

BGSAVE

BGSAVE
  • バックグランドでディスク上のデータベースに保存する

LASTSAVE

LASTSAVE
  • 前回のデータベースへの保存に成功した時間を UNIX TIME で返す
LASTSAVE
:1258452637

SHUTDOWN

SHUTDOWN
  • 全てのクライアントを停止し、データベースに保存し、サーバを終了させる

リモートサーバの制御

INFO

INFO
  • サーバの情報を返す
INFO
$290
redis_version:1.02
uptime_in_seconds:4
uptime_in_days:0
connected_clients:1
connected_slaves:0
used_memory:10208
changes_since_last_save:0
bgsave_in_progress:0
last_save_time:1258452938
total_connections_received:1
total_commands_processed:0
role:master
db0: keys=16,expires=0

MONITOR

MONITOR
  • デバッグ情報を出力させる
MONITOR
+OK
MONITOR
SADD p 1
z
:1
SADD p 1
z

SLAVEOF

SLAVEOF <host> <port>
SLAVEOF NO ONE
  • オンザフライにレプリケーションの設定を変える
  • "SLAVE NO ONE" でレプリケーションを無効にする
Last modified:2009/11/17 19:24:19
Keyword(s):[kvs] [redis]
References: