LoginSignup
0

More than 3 years have passed since last update.

Redisをdockerでいじってみる on Mac

Last updated at Posted at 2019-06-16

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減少させます。
incrbydecrbyを用いた場合、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と組み合わせられたらと思います。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0