Redisは、キーバリュー型のNoSQLデータベースで「キャッシュ」や「セッション管理」などの用途に利用されます。ここではDockerでRedisを立ち上げて、基本的なデータ操作方法を確認します。
docker-composeでRedis立ち上げ
docker-compose.yml
docker-compose.yml
に以下内容を記述します。
version: '3'
services:
redis:
image: "redis:latest"
ports:
- "6379:6379"
volumes:
- "./data/reis:/data"
立ち上げ
$ docker-compose up -d
Starting redis_redis_1 ... done
以下のようにRedisが立ち上がりました。
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------
redis_redis_1 docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp
接続 & バージョン確認
コンテナに接続して、Redis(server & cli)のバージョン確認を行います。
$ docker exec -it redis_redis_1 /bin/bash
root@ee480c7254b1:/data#
root@ee480c7254b1:/data# redis-server --version
Redis server v=5.0.7 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=7359662505fc6f11
root@ee480c7254b1:/data#
root@ee480c7254b1:/data# redis-cli --version
redis-cli 5.0.7
CLIでデータ操作
以下のように、redis-cli
でRedisサーバに接続します。
root@ee480c7254b1:/data# redis-cli
127.0.0.1:6379>
データ操作方法を確認します。
データ型|Strings
( set, get )
127.0.0.1:6379> set string_key1 wakuwaku
OK
127.0.0.1:6379> set string_key2 bank
OK
127.0.0.1:6379> get string_key1
"wakuwaku"
127.0.0.1:6379> get string_key2
"bank"
データ型|Lists
( rpush, lpush, rpop, lpop, lrange )
rpush
でmylistに要素を追加します。
127.0.0.1:6379> rpush mylist aaa
(integer) 1
lrange
でmylistの0番目から最後までの要素を確認してみます。
127.0.0.1:6379> lrange mylist 0 -1
1) "aaa"
要素を追加します。cccは lpush
を利用して要素追加してます。そのため、左端に挿入されています。
127.0.0.1:6379> rpush mylist bbb
(integer) 2
127.0.0.1:6379> lpush mylist ccc
(integer) 3
127.0.0.1:6379>
127.0.0.1:6379> lrange mylist 0 -1
1) "ccc"
2) "aaa"
3) "bbb"
rpop
で右端の要素を削除します。
127.0.0.1:6379> rpop mylist
"bbb"
127.0.0.1:6379> lrange mylist 0 -1
1) "ccc"
2) "aaa"
データ型|Sets
( sadd, srem, smembers )
sadd
でmysetに要素を追加します。
127.0.0.1:6379> sadd myset aaa
(integer) 1
127.0.0.1:6379> sadd myset bbb
(integer) 1
127.0.0.1:6379> sadd myset ccc
(integer) 1
以下のように、既に存在する要素の場合、0が返ります。
127.0.0.1:6379> sadd myset bbb
(integer) 0
smembers
でmysetの要素を確認します。
127.0.0.1:6379> smembers myset
1) "aaa"
2) "ccc"
3) "bbb"
srem
で要素を削除します。
127.0.0.1:6379> srem myset bbb
(integer) 1
127.0.0.1:6379> smembers myset
1) "aaa"
2) "ccc"
データ型|Sorted sets
( zadd, zrem, zrange, zrank )
Sorted setsでは、セット内のすべての要素にスコアをつけることができます。
zadd
でmyzset要素を追加します。
127.0.0.1:6379> zadd myzset 80 aaa
(integer) 1
127.0.0.1:6379> zadd myzset 64 bbb
(integer) 1
127.0.0.1:6379> zadd myzset 72 ccc
(integer) 1
127.0.0.1:6379> zadd myzset 53 ddd
(integer) 1
zrange
で要素を確認します。スコアの昇順で表示されます。
127.0.0.1:6379> zrange myzset 0 -1
1) "ddd"
2) "bbb"
3) "ccc"
4) "aaa"
zrevrange
で要素を確認します。スコアの降順で表示されます。
127.0.0.1:6379> zrevrange myzset 0 -1
1) "aaa"
2) "ccc"
3) "bbb"
4) "ddd"
zrank
でランクを確認します。(昇順)
127.0.0.1:6379> zrank myzset ddd
(integer) 0
127.0.0.1:6379> zrank myzset bbb
(integer) 1
127.0.0.1:6379> zrank myzset ccc
(integer) 2
127.0.0.1:6379> zrank myzset aaa
(integer) 3
zrevrank
でランクを確認します。(降順)
127.0.0.1:6379> zrevrank myzset ddd
(integer) 3
127.0.0.1:6379> zrevrank myzset bbb
(integer) 2
127.0.0.1:6379> zrevrank myzset ccc
(integer) 1
127.0.0.1:6379> zrevrank myzset aaa
(integer) 0
データ型|Hashes
( hset, hget, hmget, hgetall, hlen )
hset
でmyhashに要素を追加します。
127.0.0.1:6379> hset myhash title aaa body bbb status public
(integer) 3
hget
でmyhashの特定キーの値を取得します。
127.0.0.1:6379> hget myhash title
"aaa"
127.0.0.1:6379> hget myhash body
"bbb"
127.0.0.1:6379> hget myhash status
"public"
hmget
で複数取得できます。
127.0.0.1:6379> hmget myhash title body status
1) "aaa"
2) "bbb"
3) "public"
hkeys
でキー一覧を取得します。
127.0.0.1:6379> hkeys myhash
1) "title"
2) "body"
3) "status"
hvals
で値一覧を取得します。
127.0.0.1:6379> hvals myhash
1) "aaa"
2) "bbb"
3) "public"
hgetall
でキーと値の一覧を取得します。
127.0.0.1:6379> hgetall myhash
1) "title"
2) "aaa"
3) "body"
4) "bbb"
5) "status"
6) "public"
hlen
で要素数を取得します。
127.0.0.1:6379> hlen myhash
(integer) 3
Redisに登録されている全てのキー表示
( keys * )
127.0.0.1:6379> keys *
1) "myhash"
2) "myset"
3) "key"
4) "myzset"
5) "string_key2"
6) "mylist"
7) "string_key1"
以下のように条件を指定して抽出することもできます。
127.0.0.1:6379> keys my*
1) "myhash"
2) "myset"
3) "myzset"
4) "mylist"
キーに紐づく値の型を確認
( type [key] )
127.0.0.1:6379> type string_key1
string
127.0.0.1:6379> type mylist
list
127.0.0.1:6379> type myset
set
127.0.0.1:6379> type myzset
zset
127.0.0.1:6379> type myhash
hash
キーの削除
( del [key] )
del
で指定キーを削除できます。
127.0.0.1:6379> keys *
1) "myhash"
2) "myset"
3) "key"
4) "myzset"
5) "string_key2"
6) "mylist"
7) "string_key1"
127.0.0.1:6379>
127.0.0.1:6379> del key
(integer) 1
127.0.0.1:6379>
127.0.0.1:6379> keys *
1) "myhash"
2) "myset"
3) "myzset"
4) "string_key2"
5) "mylist"
6) "string_key1"
全DBの全キーを削除
( flushall )
127.0.0.1:6379> keys *
1) "myhash"
2) "myset"
3) "myzset"
4) "string_key2"
5) "mylist"
127.0.0.1:6379>
127.0.0.1:6379> flushall
OK
127.0.0.1:6379>
127.0.0.1:6379> keys *
(empty list or set)
有効期限の確認 & 設定
( ttl, expire )
ttl
でキーの有効期限を確認できます。
キーの状態 | 戻り値 |
---|---|
有効期限が設定されている場合 | 残りの期間を返す |
有効期限が設定されていない場合 | -1 を返す |
キーが存在しない場合 | -2 を返す |
127.0.0.1:6379> ttl string_key1
(integer) -1
expire
で有効期限を設定できます。有効期限を5秒に設定します。
127.0.0.1:6379> expire string_key1 5
(integer) 1
5秒後、キーが削除されました。
127.0.0.1:6379> ttl string_key1
(integer) -2