Redisコンテナの用意
まずコンテナを用意します。
$ docker run --name redis -d -p 6379:6379 redis redis-server --appendonly yes
Redisサーバにローカルから接続できるようにこちらもインストールしましょう
$ brew install redis
接続を確認してみましょう
$ redis-cli
127.0.0.1:6379>
clientの名前を見てみましょう
> client getname
(nil)
> client list
id=3 addr=172.17.0.1:38130 fd=9 name= age=3650 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client
nilという何も値が入ってない状態となっているので名前をつけてあげましょう
> client setname redis
OK
> client getname
"redis"
> client list
id=3 addr=172.17.0.1:38130 fd=9 name=redis age=3694 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client
Redisの操作
key-valueの入力, valueの出力
set
で入力, get
で出力を行います。
set key value [expiration EX seconds|PX milliseconds] [NX|XX]
get key
例
> set name John
OK
> get name
"John"
一度入力したkeyに、再度valueを入力すると上書きされます。
> set name Michael
OK
> get name
"Michael"
複数key-valueの入力, 複数valueの出力
複数のkey-valueの入力はmset
, 複数のvalueの出力はmget
で行います。
mset key value [key value ...]
mget key [key ...]
例
> mset name Bob name1 Peter
OK
> mget name name1
1) "Bob"
2) "Peter"
name
はJohnからBobに上書きされ、name1
は新しく作成されました。
Keyの出力
keyの確認を行う場合, 以下を用います。
keys pattern
例
> keys *
1) "name"
2) "name1"
Keyの存在確認
keyが存在するか否かを試す場合, 以下を用います。
exists key [key ...]
例
> exists name
(integer) 1
> exists name1
(integer) 1
> exists name2
(integer) 0
このように、存在するものは1
, ないものに関しては0
が出力されます。
Key-Valueの削除
不要なkey-valueがある場合には、以下で消去しましょう。
del key [key ...]
例
> del name1
(integer) 1
> keys *
1) "name"
しっかり、name1
が消えたことがわかります。
Valueの操作
数値操作
incr
で数値を1上昇, decr
で数値を1減少させます。
incrby
やdecrby
を用いた場合、keyの後ろで設定した数値だけ数に変化を与えることができます。
incr key
decr key
incrby key increment
decrby key decrement
例
> mset int1 10 int2 10
OK
> incr int1
(integer) 11
> decr int2
(integer) 9
> mget int1 int2
1) "11"
2) "9"
> incrby int1 4
(integer) 15
> decrby int2 4
(integer) 5
> mget int1 int2
1) "15"
2) "5"
stringが入ったkeyを選択すると、Errorが起きます。
> set name2 Chris
OK
> incr name2
(error) ERR value is not an integer or out of range
文字列操作
文字の足し算をしたい場合、append
を用います。
append key value
例
> get name2
"Chris"
> append name2 Redfield
(integer) 13
> get name2
"ChrisRedfield"
List型
listの作成, valueの追加
lpush
コマンドでは新しい要素をリストの先頭に追加して、 rpush
では新しい要素を末尾に追加します。
対応するリストがない状態でこの操作が行われた場合は、新しいリストが作成されます。
rpush key value [value ...]
lpush key value [value ...]
listの中身を確認したい場合は, 以下のコマンドを用います。
lrange key start stop
例
まず、リストを作ってみます。
> rpush list1 1
(integer) 1
> lrange list1 0 1
1) "1"
では、左右から値をいれていきたいと思います。
> lpush list1 0
(integer) 2
> rpush list1 2 3 4 5
(integer) 6
> lrange list1 0 5
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
リストの中のvalueの消去
リストの中身を消したいときは以下のコマンドを用います。
rpop key
lpop key
例
> rpop list1
"5"
> lpop list1
"0"
> lrange list1 0 5
1) "1"
2) "2"
3) "3"
4) "4"
list内の任意のvalueを書き換え
listの中のindexを指定して、書き換えたい場合は以下のコマンドを用います。
lset key index value
例
> rpush list1 5
(integer) 5
> lset list1 4 100
OK
> lrange list1 0 4
1) "1"
2) "2"
3) "3"
4) "4"
5) "100"
Set型
setの作成, valueの追加
sadd
コマンドによってvalueに追加していきます。
対応するsetがない状態でこの操作が行われた場合は、新しいsetが作成されます。
sadd key member [member ...]
setの中身を確認したい場合は, 以下のコマンドを用います。
smembers key
例
sadd set1 0 1 2 3 4
(integer) 5
> smembers set1
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
setの中のvalueの消去
setの場合は、indexが使えないので、中にどんな要素が入っているのかを知っている必要があります。
srem key value
例
> srem set1 4
(integer) 1
> smembers set1
1) "0"
2) "1"
3) "2"
4) "3"
和集合, 共通部分, 差集合
sunion(和集合): 2つのsetに入ってるvalueを重複無しで全て集めたもの
sinter(共通部分): 2つのsetで共通しているものを集めたもの
sdiff(差集合): 2つのsetで共通でないものを集めたもの
sunion key key
sinter key key
sdiff key key
例
> sadd set2 3 4 5 6
(integer) 4
//set1 {1, 2, 3}
//set2 {3, 4, 5, 6}
> sunion set1 set2
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
7) "6"
> sinter set1 set2
1) "3"
> sdiff set1 set2
1) "0"
2) "1"
3) "2"
まとめ
ここで、基本的なコマンドについては網羅できているんではないでしょうか。
足りない場合は、こちらを参照していただければと思います。
https://redis.io/commands
次回以降で、PythonやGoと組み合わせられたらと思います。