Написание запроса для добавления нескольких значений к ключу в хеше REDIS? - PullRequest
7 голосов
/ 29 июля 2011

Я просмотрел список команд в хэдах REDIS. Можно ли назначить несколько значений хеш-ключу в REDIS? Например, я пытаюсь представить следующую таблицу в виде хэша.

 Prod_Color  |   Prod_Count  |   Prod_Price   |   Prod_Info
------------------------------------------------------------
  Red        |       12      |       300      |   In Stock
  Blue       |        8      |       310      |   In Stock

Затем я попробовал следующие хеш-команды

HMSET Records Prod_Color "Red" Prod_Count 12 Prod_Price 300 Prod_Info "In Stock"

HMSET Records Prod_Color "Blue" Prod_Count 8 Prod_Price 310 Prod_Info "In Stock"

Однако, когда я пытаюсь получить хеш с помощью команды HGETALL Records, я вижу только второй ряд вставленных значений (т. Е. Синий, 8,310, в наличии)! Я понимаю, что могу создать отдельный хеш и вставить вторую строку значений, однако я намерен вставить все значения в один хеш.

Ответы [ 3 ]

6 голосов
/ 29 июля 2011

Что вы могли бы сделать, и я видел это в других местах, кроме моего кода, это ввести хеш-код с помощью суффикса.У вас, вероятно, есть суффикс, который идентифицирует каждую запись, я буду использовать цвета здесь:

В ВРЕМЯ ВСТАВКИ:

HMSET Records:red Prod_Color "Red" Prod_Count 12 Prod_Price 300 Prod_Info "In Stock"
HMSET Records:blue Prod_Color "Blue" Prod_Count 8 Prod_Price 310 Prod_Info "In Stock"

/* For each HMSET above, you issue SADD */
SADD Records:Ids red
SADD Records:Ids blue

В ВРЕМЯ ЗАПРОСА:

/* If you want to get all products, you first get all members */
SMEMBERS Records:Ids

/* ... and then for each member, suppose its suffix is ID_OF_MEMBER */
HGETALL Records:ID_OF_MEMBER

/* ... and then for red and blue (example) */
HGETALL Records:red
HGETALL Records:blue

Вывероятно, вы хотите использовать primary key в качестве суффикса, поскольку он должен быть доступен вам из записей реляционной базы данных.Кроме того, вы должны поддерживать набор членов (например, SREM Records:Ids red) при удалении хеш-ключей (например, DEL Records:red).Также помните, что Redis действительно хорош в качестве улучшенного кэша, вы должны настроить его так, чтобы сохранять значения (и поддерживать производительность с этим).

3 голосов
/ 29 июля 2011

Вы не можете иметь несколько элементов с одним и тем же ключом в хэше.Однако, если вы хотите извлечь все элементы или одну строку по ключу, вы можете использовать JSON:

Records red = {color:red, price:12, info:"300 in stock"}
Records blue = {color:blue, price:8, info:"310 in stock"}

Если вы не хотите использовать json, вам придется использовать несколько хешей схеш, являющийся строкой в ​​таблице.Вы можете поддержать функцию get all, также сохранив набор, содержащий ключ каждого из хэшей.

1 голос
/ 29 июля 2011

Я думаю, вы неправильно понимаете, как работают хеши.Вы не можете иметь два одинаковых поля с разными значениями.Ваша вторая команда HMSET перезаписывает значения из первой команды.Вам нужно будет использовать уникальные поля или другой ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...