はじめに
インメモリKVS型DBのRedisをPythonから呼び出す方法として、redis-pyモジュールを使うやり方があります。
このredis-pyにZADDと呼ばれるデータを格納するコマンドがあります。
このZADDの引数に変更があり、古い記事の呼び出し方ではエラーを吐くので、新しい呼び出し方を共有します。
Version
Redis本体は5.0.3, redis-pyはv3.2.0を想定
Redis 5.0.3 (00000000/0) 64 bit
tikeda:Redis tikeda$ pip show redis
Name: redis
Version: 3.2.0
Summary: Python client for Redis key-value store
Home-page: https://github.com/andymccurdy/redis-py
Author: Andy McCurdy
Author-email: sedrik@gmail.com
License: MIT
Location: /usr/local/var/pyenv/versions/3.7.0/lib/python3.7/site-packages
Requires:
Required-by:
ZADDとは
SortedSet型でデータを格納するコマンドです。
SortedSet型は、その名の通り順序付けされた集合の型です。
各データがscoreと呼ばれる値を持っており、それを基にソートされます。
参考: http://redis.shibu.jp/commandreference/sortedsets.html
呼び出し方
これまではzadd(key, score, value)やzadd(key, value, score)といった形でコマンドを叩いていましたが、現バージョンからは以下のようになりました。
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
dict = {}
dict['value'] = 10
r.zadd('aaa', dict)
print(r.zrangebyscore('aaa', '-inf', '+inf'))
ここではZRANGEBYSCOREコマンドを用いて確認しています。
辞書型になったので、まとめてvalueを与えることも可能です。
dict = {}
dict['value'] = 10
dict['has'] = 11
dict['to'] = 12
dict['be'] = 13
dict['set'] = 14
dict['here'] = 15
r.zadd('bbb', dict)
終わりに
redis-pyですが、いつからかZADDコマンドの引数順序(latitudeとlongitudeの順序)が変わっていたりと 闇深な カオスな印象をうけますね