Closed4
検証時によく使う Redis コマンドや設定など

とりあえずデータを取得するときに使う
全てのデータを取得(本番環境ではパフォーマンスに影響が出るため無闇に使わないこと)
127.0.0.1:6379> KEYS *
1) "customer:{1969}:user:{10010719}:items"
2) "customer:{1969}:user:{10003342}:items"
3) "customer:{1969}:user:{10056734}:items"
...
98) "customer:{1969}:user:{10021006}:items"
99) "customer:{1969}:user:{10082247}:items"
100) "customer:{1969}:user:{10033240}:items"
127.0.0.1:6379> KEYS customer:{*}:user:{*}:items
1) "customer:{1969}:user:{10010719}:items"
2) "customer:{1969}:user:{10003342}:items"
3) "customer:{1969}:user:{10056734}:items"
...
98) "customer:{1969}:user:{10021006}:items"
99) "customer:{1969}:user:{10082247}:items"
100) "customer:{1969}:user:{10033240}:items"
指定した文字列にマッチする全てのキーを取得(countを指定するのが望ましい)
127.0.0.1:6379> SCAN 0 MATCH customer:{*}:user:{*}:items
1) "10240"
2) 1) "customer:{1969}:user:{10019565}:items"
2) "customer:{1969}:user:{10012381}:items"
3) "customer:{1969}:user:{10031441}:items"
4) "customer:{1969}:user:{10080567}:items"
5) "customer:{1969}:user:{10054365}:items"
6) "customer:{1969}:user:{10030981}:items"
7) "customer:{1969}:user:{10018066}:items"
8) "customer:{1969}:user:{10007760}:items"
9) "customer:{1969}:user:{10057106}:items"
10) "customer:{1969}:user:{10086056}:items"

複数のデータをまとめて操作したい(投入と取得)
MSET・MGET
まとめて投入
127.0.0.1:6379> MSET customer:{1969}:user:{10011460}:items "30062034,30076875,30096467" customer:{1969}:user:{10070677}:items "30054810,30004512"
OK
まとめて取得
127.0.0.1:6379> MGET customer:{1969}:user:{10011460}:items customer:{1969}:user:{10070677}:items
1) "30062034,30076875,30096467"
2) "30054810,30004512"
# 存在しないキーを指定すると nil が返る
127.0.0.1:6379> MGET customer:{1969}:user:{10011460}:items customer:{1969}:user:{9999999}:items customer:{1969}:user:{10070677}:items
1) "30062034,30076875,30096467"
2) (nil)
3) "30054810,30004512"
SAD・SMEMBERS
1つのキーに対して複数の値をSET型で関連付ける。※重複排除される、順序はない
127.0.0.1:6379> SADD customer:{1969}:user:{10004046}:items 30098554 30078569 30033259
(integer) 3
127.0.0.1:6379> SADD customer:{1969}:user:{10082975}:items 30003094
(integer) 1
127.0.0.1:6379> SADD customer:{1969}:user:{10022919}:items 30000761 30015732
(integer) 2
指定したキーに関連付けられたSET型のデータを取得する
127.0.0.1:6379> SMEMBERS customer:{1969}:user:{10004046}:items
1) "30033259"
2) "30078569"
3) "30098554"
127.0.0.1:6379> SMEMBERS customer:{1969}:user:{10082975}:items
1) "30003094"
127.0.0.1:6379> SMEMBERS customer:{1969}:user:{10022919}:items
1) "30000761"
2) "30015732"
SADD で投入したデータは GET や MGET では型が異なるため取得できない
127.0.0.1:6379> GET customer:{1969}:user:{10004046}:items
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> MGET customer:{1969}:user:{10004046}:items customer:{1969}:user:{10082975}:items customer:{1969}:user:{10022919}:items
1) (nil)
2) (nil)
3) (nil)

データを一旦初期化したいときに使う
現在接続中のデータベース(デフォルトは0番)にある全キーを削除。※本番環境で使う際は要注意
127.0.0.1:6379> KEYS customer:{*}:user:{*}:items
1) "customer:{1969}:user:{10010719}:items"
2) "customer:{1969}:user:{10003342}:items"
3) "customer:{1969}:user:{10056734}:items"
...
98) "customer:{1969}:user:{10021006}:items"
99) "customer:{1969}:user:{10082247}:items"
100) "customer:{1969}:user:{10033240}:items"
# 削除する
127.0.0.1:6379> FLUSHDB
OK
# 削除されたことを確認
127.0.0.1:6379> KEYS customer:{*}:user:{*}:items
(empty array)
Redis サーバーが内部的に確保している不要なメモリを OS に返却するための命令。
127.0.0.1:6379> MEMORY PURGE
OK
補足:
- Redis は効率のためにメモリを確保したまま保持し、OS に返さないことが多い(used_memory_rss が高止まりする原因)。
- MEMORY PURGE は、Redis のメモリアロケータ(jemalloc など)に対し、アイドルなメモリを OS に返すよう要求する。

メモリ周りの確認
投入したデータがどれくらいの容量だったのかを確認する
host マシンから redis コンテナ向けのコマンドを実行すれば正規表現でやりくりできる。※もっと良い方法がありそうにも思うが
# データ投入前
$ docker exec -i core_redis redis-cli FLUSHALL
OK
$ docker exec -it core_redis redis-cli INFO memory | grep -E "^(used_memory|used_memory_human):"
used_memory:979112
used_memory_human:956.16K
# データ投入後
$ docker exec -it core_redis redis-cli INFO memory | grep -E "^(used_memory|used_memory_human):"
used_memory:2278293928
used_memory_human:2.12G
Redis サーバ側のメモリ上限値や上限に達した時の振る舞い確認する
// 上限値は1GBに設定されている
docker exec -it core_redis redis-cli CONFIG GET maxmemory
1) "maxmemory"
2) "1073741824"
// 上限値に達した場合は最も長い間アクセスされていない(使われていない)キーから削除
docker exec -it core_redis redis-cli CONFIG GET maxmemory-policy
1) "maxmemory-policy"
2) "allkeys-lru"
→この状態で、1GB以上のデータ突っ込むとひっそりと消されていくので要注意。
// 上限値に達した場合はエラーにする
$ docker exec -it core_redis redis-cli CONFIG GET maxmemory-policy
1) "maxmemory-policy"
2) "noeviction"
→開発時とかはエラーにする設定とかの方が良いかも。
上限に達すると OOM command not allowed when used memory > 'maxmemory'
のエラーを吐かせる。
このスクラップは1ヶ月前にクローズされました