redis-pyを使ったzaddコマンドの引数について (v3.2.0)


はじめに

インメモリ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: [email protected]
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の順序)が変わっていたりと 闇深な カオスな印象をうけますね