我想在Redis缓存中附加字典。
在Redis中添加添加字典没有任何问题,但是我不能附加几个字典到Redis中。
这是一个例子:
import redis
cli = redis.Redis('localhost')
list_of_dict = [ # dummy
{
'tags': {'module': 'destructor', 'station': 'SNMP'},
'metric_name': 'destructor',
'value': -8555,
'time': '2018-11-13T15:25:07'
},
{
'tags': {'module': 'voltage', 'station': 'SNMP'},
'metric_name': 'voltage',
'value': 222,
'time': '2018-11-13T15:25:09'
}
]
from pprint import pprint
for ld in list_of_dict:
cli.hmset("pythonDict", ld)
# conn.append(key, val) # Need to key value.
pprint(cli.hgetall("pythonDict"))
在上面的代码段中,.hmset()
仅在Redis(覆盖)中写入list_of_dict
的 last 元素/字典,.append()
需要写入{{1 }}。
如何在Redis上编写/附加key,val
的两个词典并检索它?
答案 0 :(得分:2)
分别设置键和值。通过以下方式编写代码:
for key,val in list_of_dict:
cli.hset("pythonDict", key, val)
pprint(cli.hgetall("pythonDict"))
如果要按原样存储数组并使用 json
包检索值。下面是一个示例:
import json
cli.set("pythonDict", json.dumps(list_of_dict))
pprint(json.loads(cli.get("pythonDict")))
答案 1 :(得分:1)
您正在使用的方法可能会变得不理想,因为您正在检索完整的数据,将其追加并保存。 由于您的要求是反复添加到现有列表中,因此最好使用Redis LIST。
存储和检索方法为:
列表中的每个元素都是一个字符串(反过来就是 您的单个字典元素的JSON表示形式)
每当要将字典添加到现有缓存时, 在python的redis客户端上使用LPUSH命令。那会 将新字典添加到现有Redis列表中。
对于数据检索,您可以使用LRANGE来检索完整的
或部分词典列表。 LRANGE
具有相同的效果
到HGETALL
。
redis客户端示例(在python redis客户端中可以使用相同的命令集):
答案 2 :(得分:1)
两种解决方案
1.use json
import pickle
cli.set("pythonDict", pickle.dumps(list_of_dict))
print(pickle.loads(cli.get("pythonDict")))
2。用泡菜
move
如果您的字典键不是字符串,则应使用pickle。