Redis Pythonによる操作

スポンサーリンク

Node.js, .NET, Python, Java, PHPなど殆どのプログラミング言語でRedisを操作するライブラリが存在します。このページでは、PythonでRedisを操作する方法をまとめます。

前提

公式ドキュメント

参考になる公式ドキュメントを以下に示します。

動作確認済環境

  • Rocky Linux 8.6
  • Redis 5.0.3
  • Python 3.6.8

Pythonによる操作例

Python環境構築

PythonでRedisを操作する場合は、redisというパッケージをインストールするだけで操作可能になります。以下に操作例を示します。

dnf install python3
python3 -m venv redis
source redis/bin/activate
pip install redis

念の為、redisが正常にインストールされているかを確認します。「import redis」を実行してエラーがない事を確認しましょう。

(redis) [root@linux010 ~]# python3
Python 3.6.8 (default, Nov  8 2022, 11:32:15) 
[GCC 8.5.0 20210514 (Red Hat 8.5.0-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import redis
>>> 
(redis) [root@linux010 ~]#

同期処理

redis.Redisインスタンスを生成すると、Redisへ接続できます。

(redis) [root@linux010 ~]# python3
Python 3.6.8 (default, Nov  8 2022, 11:32:15) 
[GCC 8.5.0 20210514 (Red Hat 8.5.0-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import redis
>>> r = redis.Redis(host='localhost', port=6379, db=0)
>>> 

SETやGETの操作例は以下の通りです。

>>> r.set('foo', 'bar')
True
>>> r.get('foo')
b'bar'
>>> 

非同期処理

redis.asyncio.Redisインスタンスを生成すると、非同期処理をするインスタンスを生成できます。

(redis) [root@linux010 ~]# python3
Python 3.6.8 (default, Nov  8 2022, 11:32:15) 
[GCC 8.5.0 20210514 (Red Hat 8.5.0-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import redis.asyncio
>>> r = redis.asyncio.Redis(host='localhost', port=6379, db=0)
>>> 

非同期処理ですので、await(処理の完了待ち)をしない場合は実行結果が分かりません。以下はpingの実行結果が非同期で処理される例です。

(redis) [root@linux010 ~]# python3
Python 3.6.8 (default, Nov  8 2022, 11:32:15) 
[GCC 8.5.0 20210514 (Red Hat 8.5.0-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import asyncio
>>> import redis.asyncio
>>> 
>>> r = redis.asyncio.Redis(host='localhost', port=6379, db=0)
>>> r.ping()
<coroutine object Redis.execute_command at 0x7f9e1d2741a8>
>>> 

awaitをつけて処理の実行結果を待てば、以下のようにpingの実行結果を表示する事ができます。

(redis) [root@linux010 ~]# python3
Python 3.6.8 (default, Nov  8 2022, 11:32:15) 
[GCC 8.5.0 20210514 (Red Hat 8.5.0-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import asyncio
>>> import redis.asyncio
>>> 
>>> async def my_ping():
...   r = await redis.asyncio.Redis(host='localhost', port=6379, db=0)
...   return await r.ping()
... 
>>> loop = asyncio.get_event_loop()
>>> loop.run_until_complete(my_ping())
True
>>> 
タイトルとURLをコピーしました