はじめに
本記事は以下の記事の続きとなります。
以下は前回記事をご覧ください。
- ライブラリのインストール
- データベースの接続
今回はElastiCache for Redisでハッシュ型を扱う方法について述べます。
ハッシュ型:Redisへの書き込み
ハッシュ型は1つのkeyに対して、複数のfieldとvalueの組を持つことができます。
基本的な書き込みは以下のようにhset
を用いて記述します。
import redis
redis_host = 'エンドポイント'
redis_port = 6379
client = redis.Redis(host=redis_host, port=redis_port,decode_responses=True, ssl=True)
key = "id1"
mapping = {"a":"1"}
client.hset(key, mapping=mapping)
またRedisは、int型やfloat型、Noneをそのまま保存することはできず、文字列として保存する必要があります。
def to_str(value):
"""
int型とfloat型を識別して、型情報と共に文字列型として保存し、Noneを"null"として保存する関数
"""
if isinstance(value, int):
return f"int:{field_value}"
elif isinstance(value, float):
return f"float:{field_value}"
elif value == None:
return "null"
return value
pre_mapping = {"a",1,"b":None}
mapping = {field: to_str(value) for field, value in pre_mapping.items()}
client.hset(key, mapping=mapping)
ハッシュ型:Redisへの読み込み
ハッシュ型の読み込みは以下のようにhgetall
を用いて行います。
前述のようにint型やfloat型の変数を文字列型から本来の型に戻す場合は、cast_value
を使えば良いです。
def cast_value(value):
"""
int型とfloat型のprefixを識別して本来の型にキャストし、"null"をNoneに戻す関数
"""
if value.startswith('int:'):
return int(value.split(':', 1)[1])
elif value.startswith('float:'):
return float(value.split(':', 1)[1])
elif value == "null":
return None
return value
key = "id1"
res = client.hgetall(key)
res = {field: cast_value(value) for field, value in res.items()}
おわりに
Python×ElastiCache for Redisのハッシュ型の使い方の解説は以上となります。
一旦、本アドベントカレンダーでのPython×AWSのDBの解説は以上としますが、機会があれば(1)RDSやMongoDBのプログラムを解説し、(2)速度試験を行うという記事をまとめたいと思います。
- 前回までの類似記事はこちら