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 >>>