1. ホーム
  2. python

[解決済み] 複雑なオブジェクトをredisに保存する方法 (redis-pyを使用)

2023-07-21 21:49:10

質問

hmset関数は各フィールドの値を設定することができますが、値自体が複雑な構造のオブジェクトである場合、hgetから返される値はシリアライズされた文字列であり、元のオブジェクトではないことに気づきました

images= [{'type':'big', 'url':'....'},
     {'type':'big', 'url':'....'},
     {'type':'big', 'url':'....'}]   

redis = Redis()
redis.hset('photo:1', 'images', images)

i = redis.hget('photo:1', 'images')
print type(i)

iの型は文字列で、pythonのオブジェクトではありません。各フィールドを手動でパースする以外に、この問題を解決する方法はありますか?

どのように解決するのですか?

Redisではネストした構造を作成することはできません。つまり、(例えば)ネイティブRedisリストをネイティブRedisハッシュマップの中に格納することはできないのです。

本当にネストされた構造が必要な場合は、代わりにJSON-blob(または同様のもの)を保存するとよいでしょう。別のオプションは、マップキーの値として別のredisオブジェクトへのquot;id"/キーを格納することですが、これは完全なオブジェクトを取得するためにサーバーへの複数の呼び出しを必要とします。