如何在Redis缓存中追加字典?

时间:2018-11-13 13:58:39

标签: python redis

我想在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两个词典并检索它?

3 个答案:

答案 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

存储和检索方法为:

  1. 列表中的每个元素都是一个字符串(反过来就是 您的单个字典元素的JSON表示形式)

  2. 每当要将字典添加到现有缓存时, 在python的redis客户端上使用LPUSH命令。那会 将新字典添加到现有Redis列表中。

  3. 对于数据检索,您可以使用LRANGE来检索完整的 或部分词典列表。 LRANGE具有相同的效果 到HGETALL

redis客户端示例(在python redis客户端中可以使用相同的命令集):

enter image description here

答案 2 :(得分:1)

两种解决方案

1.use json

import pickle
cli.set("pythonDict", pickle.dumps(list_of_dict))
print(pickle.loads(cli.get("pythonDict")))

2。用泡菜

move

如果您的字典键不是字符串,则应使用pickle。