Как добавить словарь в кеш Redis? - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу добавить словарь в кэш 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() записывает только последний элемент / dict из list_of_dictв Redis (переопределить) и .append() нужно key,val.

Как мне написать / добавить два словаря из list_of_dict в Redis и получить его?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Подход, который вы используете, может оказаться неоптимальным, поскольку вы извлекаете полные данные, добавляете их и сохраняете. Поскольку ваше требование итеративно дополняет существующий список, лучше использовать Redis LIST .

Подход к хранению и поиску будет:

  1. Каждый элемент вашего списка будет строкой (которая, в свою очередь, является JSON представление вашего единственного элемента словаря)

  2. Всякий раз, когда вы хотите добавить словарь в существующий кеш, вы используйте команду LPUSH на Redis-клиенте Python. Это было бы добавьте ваши новые словари в существующий список Redis.

  3. Для извлечения данных вы должны использовать LRANGE , чтобы получить полностью или частичный список словарей. LRANGE имеет эквивалентную производительность до HGETALL.

Пример с клиентом Redis (такой же набор команд можно использовать в клиенте Python Redis):

enter image description here

0 голосов
/ 13 ноября 2018

Установите ключ и значение отдельно.Напишите код следующим образом:

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")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...