6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ARISE analyticsAdvent Calendar 2023

Day 13

Python×ElastiCache for Redis:初心者向け簡単チュートリアル1-文字列型-

Last updated at Posted at 2023-12-12

はじめに

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の文字列型の使い方の解説は以上となります。

  • ハッシュ型での実装はこちら

  • 前回までの類似記事はこちら

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?