はじめに
AWS Elasticache for Redisは、スケールアウトと高速なキャッシングを提供するマネージド型のインメモリデータストアサービスです。このサービスは、データの読み込みと書き込みのレイテンシーを大幅に削減し、アプリケーションのパフォーマンスを向上させることができます。
しかし、PythonとElasticache for Redisを組み合わせた実装に関する情報は多くなく、特に初心者にとっては取り組みにくいかもしれません。
よって本記事ではPythonを使ったElasticache for Redisの基本的な利用方法をわかりやすく紹介します。
Redisの型は文字列型、ハッシュ型などがあります。
今回は文字列型をPythonで扱う方法について解説します。明日(12/14)はハッシュ型を解説予定です。
以降のプログラムは、Redisのエンジンバージョンは7.0
でテストをしています。
内容
事前準備
ElastiCache for Redisを扱うためのライブラリredis-py
をインストールします。
(仮想環境)% pip install redis
Redisとの接続
redis_host = 'エンドポイント'
redis_port = 6379
client = redis.Redis(host=redis_host, port=redis_port,decode_responses=True, ssl=True)
decode_responses=True
とすると、バイト型の返り値がデコードされて返ってきます。
ssl=True
は転送の暗号化を行っている場合に必須となります。。
文字列型:Redisへの書き込み
書き込みは以下のようにset
を使います。
key = 'id1'
value = 1
client.set(key, value)
Redisのキーは必ず一意にしなければなりません。
以下のように入れ子になっているjsonファイルをRedisに保存する場合は、以下のように記述すると良いです。
{
"id1": {
"a":1,
"b":2
},
"id2": {
"a":1,
"b":2
},
}
import json
file_path = 'ファイル名'
with open(file_path, 'r') as file:
data = json.load(file)
for key, value in data.items():
client.set(key, json.dumps(value))
入れ子の値をjson.dumps()
で文字列にするのがポイントです。
文字列型:Redisへの読み込み
単一のデータを取得する場合のプログラムは以下です。
import json
key = 'id1'
res = client.get(key)
#書き込みでjson.dumps()していた場合に必要
if res:
res = json.loads(res)
次に条件に該当する値を複数取得する場合のプログラムとして、2通りの書き方を紹介します。
import json
keys_condition = 'id*'
#パターン1:keysを用いる
matching_keys = client.keys(keys_condition)
#パターン2:scanを用いる
cursor = 0
matching_keys = []
while True:
cursor, keys = client.scan(cursor, match=keys_condition)
matching_keys.extend(keys)
if cursor == 0:
break
#パターン1&2共通
res = client.mget(matching_keys)
#書き込みでjson.dumps()していた場合に必要
res = [json.loads(r) for r in res if r is not None]
パターン1&2はデータのサイズなどによって、どちらが速いかが異なります。実験して確かめることをオススメします。
おわりに
Python×ElastiCache for Redisの文字列型の使い方の解説は以上となります。
- ハッシュ型での実装はこちら
- 前回までの類似記事はこちら