LoginSignup
5
4

More than 5 years have passed since last update.

RedisのCRUD操作をPythonから行う

Posted at

※自分の勉強メモ用記事

はじめに

環境構築

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

image.png

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に対して配列を格納する

image.png

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に対して集合を格納する

image.png

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を格納する

image.png

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))
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4