Python

PythonでRedisを操作しよう (基本操作編)

投稿者 : OSCA

概要

 本稿では Pyhon から、Key-Value ストア「Redis」に接続し、データ操作を行う方法について解説します。 Redis はインストールが完了していることを前提に解説します。 Redis のインストールが済んでいない場合は、「Redis入門」の記事を参考に導入を済ませてください。

redis-py

 Python から Redis サーバーにアクセスするには、Python 用の Redis クライアント「redis-py」を利用するのが便利です。 redis-py は PyPI の pip install コマンドで簡単にインストールすることができます。

$ pip install redis

Redis で扱える型

 さっそく Python から Redis を操作する基本的な方法についてみていこうと思いますが、Redis を利用するにあたり一番重要な点は「型」です。 Redis で扱える値の型は、次のようなものがあります。

型名 説明
文字列型 文字を値として保存できます。
リスト型 複数の値をリストとして保存できます。
ハッシュ型 文字列をキーとして、値を保存できます。
セット型 保存する値が重複しない集合として値を保存できます。

Redisサーバーへの接続

 何はともあれ、Python から Redis サーバーへ接続しないと始まりません。 redis-py は redis という名前のパッケージを import することで利用できるようになります。 そして redis.Redis() 関数で Redis サーバーへ接続できます。

import redis

# Redis に接続します
# Redisサーバーのホスト名, ポート番号, データベース番号 を指定します
redis = redis.Redis(host='localhost', port=6379, db=0)

文字列型データの追加・取得・削除

 まずは文字列型データの操作について、基本操作を示します。 Redis クラスの以下の関数を利用してみます。

関数 概要
get() 指定したキーの値を取得します。
delete() 指定したキーの値を削除します。
set() 値を追加します。
import redis

# Redis に接続します
r = redis.Redis(host='localhost', port=6379, db=0)

# 'hoge' というキーで 'moge' という値を追加します
r.set('hoge', 'moge')

# 追加した値を取得して表示します
hoge = r.get('hoge')
print(hoge.decode())

# 追加した値を削除します
result = r.delete('hoge')
moge

リスト型データの追加・取得・削除

 続いてリスト型を扱ってみましょう。 ここでは、以下の関数を利用してみましょう。

関数 説明
lpop() リストの先頭から値を取り出します。
rpop() リストの末尾から値を取り出します。
lpush() リストの先頭に値を追加します。
rpush() リストの末尾に値を追加します。
import redis

# Redis に接続します
r = redis.Redis(host='localhost', port=6379, db=0)

# リストの末尾に値を追加します
r.rpush('name', 'Tom')
r.rpush('name', 'Alex')

# リストの先頭に値を追加します
r.lpush('name', 'Taro')

# リストの先頭から値を取り出します (取得した上で削除されます)
name = r.lpop('name')
print(name)

# リストの末尾から値を取り出します (取得した上で削除されます)
name = r.rpop('name')
print(name)

result = r.delete('name')
b'Taro'
b'Alex'

ハッシュ型データの追加・取得・削除

 次にハッシュです。 ここでは次の関数を利用してみたいと思います。

関数 説明
hdel() ハッシュから値を削除します。
hget() ハッシュから値を取得します。
hgetall() ハッシュを取得します。
hset() ハッシュに値を追加します。
import redis

# Redis に接続します
r = redis.Redis(host='localhost', port=6379, db=0)

# ハッシュを追加します
r.hset('man1', 'name', 'Taro')
r.hset('man1', 'country', 'Japan')

# 追加したハッシュを取得して表示します
name    = r.hget('man1', 'name')
country = r.hget('man1', 'country')
print(name.decode())

# ハッシュを取得します
man1 = r.hgetall('man1')
print(man1['name'.encode()].decode())

# ハッシュの特定のキーを削除します
result = r.hdel('man1', 'country')

# ハッシュを削除します
result = r.delete('man1')
Taro
Taro

セット型データの追加・取得・削除

 続いてセット型についても基本操作を示します。 利用するのは次の関数です。

関数 説明
sadd() セットに値を追加します。
smembers() セットを取得します。
srem() セットから値を削除します。
import redis

# Redis に接続します
r = redis.Redis(host='localhost', port=6379, db=0)

# セットを追加します
# 'name' というキーで、'Tom' と 'Mike' の値を追加します
r.sadd('name', 'Tom', 'Mike')

# セットに更に値を追加します
# セット型のため、Alex だけが追加されます
r.sadd('name', 'Alex', 'Tom')

# セットから値を削除します
r.srem('name', 'Tom')

# セットを取得します (集合型で返却されます)
name = r.smembers('name')
print(name)

# セットを削除します
result = r.delete('name')
{b'Mike', b'Alex'}

おわりに

 本稿では Python から redis-py を利用して Redis を操作する基本動作について解説しました。 Python から Redis をするキッカケになれば幸いです。

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。
個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca