首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Redis缓存中添加字典?

如何在Redis缓存中添加字典?
EN

Stack Overflow用户
提问于 2018-11-13 13:58:38
回答 3查看 5.7K关注 0票数 2

我想在Redis缓存中添加一本字典。

对于在Redis中添加一个字典,我没有任何问题,但是我不能在中添加几个字典,但是不能。

下面是一个例子:

代码语言:javascript
复制
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)  # Needs a key value.

pprint(cli.hgetall("pythonDict"))

在上面的代码片段中,.hmset()只将最后一个元素/ list_of_dict的dict写入Redis (覆盖),.append()需要一个key,val

如何在Redis上编写/追加两本字典( of list_of_dict )并检索它们?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-16 04:29:28

两解

1.使用json

代码语言:javascript
复制
import json
cli.set("pythonDict", json.dumps(list_of_dict))
print(json.loads(cli.get("pythonDict")))

2.使用泡菜

代码语言:javascript
复制
import pickle
cli.set("pythonDict", pickle.dumps(list_of_dict))
print(pickle.loads(cli.get("pythonDict")))

如果你的字典键不是字符串,你应该使用泡菜。

票数 1
EN

Stack Overflow用户

发布于 2018-11-13 14:08:41

分别设置键和值。以下列方式编写代码:

代码语言:javascript
复制
for key,val in list_of_dict:
    cli.hset("pythonDict", key, val)

pprint(cli.hgetall("pythonDict"))

如果要按原样存储数组并检索值,请使用json包。以下是一个样本:

代码语言:javascript
复制
import json
cli.set("pythonDict", json.dumps(list_of_dict))
pprint(json.loads(cli.get("pythonDict")))
票数 2
EN

Stack Overflow用户

发布于 2018-11-14 06:53:16

您所使用的方法可能会变得不太理想,因为您正在检索完整的数据、附加到它并保存它。由于您的需求是迭代地附加到现有列表中的,所以最好使用Redis 列表

储存和检索办法如下:

  1. 列表中的每个元素都是一个字符串(这反过来是单个字典元素的JSON表示)
  2. 每当您想将字典附加到现有缓存时,都可以在python客户端上使用卢普命令。这将将您的新字典附加到现有的Redis列表中。
  3. 对于数据检索,您可以使用朗格检索全部或部分字典列表。LRANGE的性能与HGETALL相当。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53282674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档