Redisデータ操作(string,list,set,zset,hash)

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

参考