2012-01-09 3 views
1

Возможно ли иметь список пар ключ/значение в redis? или, возможно, набор пар значений ключа.Список ключевых пар значений в redis

Что я хочу иметь это список временных штампов даты, которые имеют счетчик следующим образом:

1.1.12 -> 12 
1.2.12 -> 1 
1.3.12 -> 3 

Я хочу, чтобы иметь возможность использовать получить диапазон следующим образом:

диапазона прибудет 1.1.12 до 1.2.12, и я хочу получить результат как 13.

Возможно ли это?

Какие структуры я должен использовать?

Каков правильный способ сделать это?

Допустим, я хочу иметь штампы времени в виде набора, и каждая метка будет указывать на 3-4 пар ключ-значение следующим образом:

1.1.12 -> error : 1 
      pass : 100 
1.2.12 -> error : 3 
      pass : 50 
1.3.12 -> error : 12 
      pass : 100 

делает поддержку C# клиента это?

Моя основная цель - сохранить эту многозначную структуру и иметь возможность запрашивать.

ответ

0

Мое предложение состояло в том, чтобы преобразовать строки даты/времени в нечто вроде «секунд с эпохи» (но, возможно, используя 64-битное значение, если вам нужен более широкий диапазон, чем с 1970 по 2038 год) и, возможно, с использованием другого отправной точкой, опять же, в соответствии с вашими требованиями приложения).

Оттуда я использую zset («отсортированный» или «забитый» набор, который поддерживает выборку подмножеств с использованием операций/команд ZRANGE и ZRANGEBY Redis). Секунда-ваша-эпоха может быть оценкой, и ваше значение может быть любым кодированным значением, которое вам нравится (включая JSON или BSON-кодированный словарь/хеш-таблицу). Или это может быть простая строка, которую вы используете как ключ Redis (таким образом, реализуя один слой косвенности --- zset, действующий как индекс ключей Redis). Если вы выберете этот последний подход, я бы рекомендовал вам использовать целое число Redis для предоставления уникальных идентификаторов последовательности для ваших ключей --- так что у него будут свойства ACID на возможной грани параллельных процессов/узлов, создающих эти косвенные ключи/значение пар).

+0

ОК, это нормально, не проблема, но я хочу также использовать счетчик. я смотрел на zrange, но sortedset поддерживает операцию увеличения? – DarthVader

+0

В целом Redis не поддерживает различные операции/команды по значениям, содержащимся в его наборах, zsets или хэшах. Другими словами, вы не можете использовать INCR по некоторому счету или элементу в zset (вам нужно будет выполнить одну операцию, чтобы удалить элемент из zset и другой, чтобы добавить только созданную пару пар очков/значений обратно в него). Существует операция HINCRBY, но для чего-то другого, кроме этого, вам может понадобиться использовать HSETNX в поле «блокировка» ... выполнить вашу операцию ... затем HDEL ваш замок. Значение в таком замке может, возможно, облегчить обнаружение блокировки. –

+0

, что слишком много, чтобы этого не сделать? Мне было любопытно, есть ли более простой способ сделать это. возможно встроенная функциональность. – DarthVader

Смежные вопросы