LoginSignup
6
0

Python×ElastiCache for Redis:初心者向け簡単チュートリアル2-ハッシュ型-

Posted at

はじめに

本記事は以下の記事の続きとなります。

以下は前回記事をご覧ください。

  • ライブラリのインストール
  • データベースの接続

今回は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)速度試験を行うという記事をまとめたいと思います。

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

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