け日記

最近はPythonでいろいろやってます

Python: Redisで複数の値を操作する (mset, mget, scan, delete)

小ネタです。

以前、PythonからRedisを操作するredis-pyについて紹介しましたが、今回はこのredis-pyで複数の値を一括して値を設定・削除する方法についてです。

準備

こちら↓の記事を参考にRedisコンテナの追加・redis-pyのインストールを行ってください。

ohke.hateblo.jp

で、接続します。

import redis

conn = redis.StrictRedis(host='localhost', port=6379)

複数の値を更新 (mset)

msetメソッドで、引数に辞書を渡すことで一括更新できます。成功すると"True"が返ります。

ret = con.mset({'key1': 'value1', 'key2': 'value2'})
print(ret)  # True

複数の値を取得 (mget, scan)

msetと対になるmgetメソッドにキーのリストを渡すと、値を一括取得できます。

values = con.mget(['key1', 'key2'])
print(values)  # [b'value1', b'value2']

あるパターンのキー (例えば"key*") の値を取得する場合、最初にキーをscanしてからmgetします。
setが返ってきますが、2つ目がキーのリストとなります。1つ目の値は次に読み込むべきインデックスです (count引数が設定されていない場合は0) 。

keys = con.scan(match='key*')
print(keys)  # (0, [b'key2', b'key1'])
# keys = con.scan(match='key*', count=1)
# print(keys)  # (1, [b'key2'])

values = con.mget(keys[1])
print(values)  # [b'value2', b'value1']

複数の値を削除 (delete)

値の削除はdeleteメソッドで、引数にキーのリストを渡すことで削除できます。

_, keys = con.scan(match='key*')

ret = con.delete(*keys)
print(ret)  # 2
print(con.mget(keys))  # [None, None]