RedisのCRUD操作をPythonから行う


※自分の勉強メモ用記事

はじめに

環境構築

Dockerを利用

docker run --name some-redis -d --rm -p 6379:6379 redis:5.0.0

Pythonクライアントのインストール


# condaでインストール
conda install redis
# pipでインストール
pip install redis

基本概念

CRUD操作

ライブラリ読込/接続


import redis

# 接続
r = redis.StrictRedis(host='yourhost', port=6379, db=0)

※コネクションプール使うと2倍速らしい

Strings

  • 単純なKeyValue

Create

# Keyに対してValueを追加
r.set('Key01', 'Value01')
r.set('Key02', 'Value02')

Read

# Key01のValueを読み出す
r.get('Key01')

Update

# Keyを指定してValueを更新
r.set('Key02', 'Value02_upd')

Delete

# Keyの削除
r.delete('Key01','Key02')

Lists

  • Keyに対して配列を格納する

Create

# KeyList01というKeyに対してリスト作成 > [Value01]
r.rpush('KeyLists01', 'Value01')

# Key01リスト右側にValueを追加 > [Value01,Value02,Value03]
r.rpush('KeyLists01', 'Value02')
r.rpush('KeyLists01', 'Value03')

# Key01リスト左側にValueを追加 > [Value00,Value01,Value02,Value03]
r.lpush('KeyLists01','Value00')

# ループでValueを追加
for i in ['A','B','C','D','E']:
    r.rpush('KeyLists01','Value' + i)

Read

# 左から範囲指定しValueを表示
# lrange(Key,Start,End) ※Endは含まれる
r.lrange('KeyLists01',0,r.llen('Key01')) 

Update

# KeyとindexでValueを更新する
r.lset('KeyLists01',1,'Value01_upd')

Delete

# 右から1要素削除し、削除対象のValueを戻り値とする
pop = r.rpop('KeyLists01')
print(pop) # > ValueE

# 左から1要素削除
pop = r.lpop('KeyLists01')
print(pop) # > Value00

Sets

  • Keyに対して集合を格納する

Create/Update

# 1番目の引数にKeyを指定し、2番目以降にMemberを指定
r.sadd('KeySets01', 'A','B','C','D')
r.sadd('KeySets01', 'D') # 重複なので追加されない(戻り値 0)
r.sadd('KeySets01', 'E') # 追加される(戻り値 1)

Read

# Key内のMemberを確認
r.smembers('KeySets01')

Delete

# KeyとMemberで削除
r.srem('KeySets01','A')

Calculate

# 計算用データ登録
r.sadd('KeySets02','C','D','E','F')
# 和集合
r.sunion('KeySets01','KeySets02')
# 積集合
r.sinter('KeySets01','KeySets02')
# 差集合
r.sdiff('KeySets01','KeySets02')

Hashes

  • Keyに対してFieldとValueを格納する

Create

# Key,Field,Valueの3構造のデータ
r.hset("lv0", "lv1_1", "lv2_1")
r.hset("lv0", "lv1_2", "lv2_2")
r.hset("lv0", "lv1_3", "lv2_3")
r.hset("lv0", "lv1_4", "lv2_4")

Read

# Key,Fieldを指定してValueを取得する
r.hget('lv0', 'lv1_3')

# Keyでデータを取得する
r.hgetall("lv0")

Update

# Key,Fieldを指定してValueを更新
r.hset("lv0", "lv1_3", "update_lv2_3")
# r.hget('lv0', 'lv1_3') > b'update_lv2_3'

Delete

# Key,Fieldで削除
r.hdel('lv0','lv1_3')

OTHER

DROP

# CurrentDBの全てのキーを削除
r.flushdb()
# 全てのDBの全てのキーを削除
r.flushall()

Keys

# どのデータ型でもKeyで削除できる
r.delete(Key)

# Key一覧
r.keys()

# Keyに格納されたデータ型表示
r.type(Key)

# Keyに格納されたデータ型表示全量
for i in r.keys():
    print(i,r.type(i))