Как получить количество значений в хэше Redis? - PullRequest
6 голосов
/ 29 апреля 2011

я получил хэш redis, например

key field value

1000 state "ca" 
1000 zip "95054"
2000 state "ca" 
2000 zip "95050"
3000 state "ny" 
3000 zip "12345"

как я могу ответить на такие вопросы, как, например, состояние "CA". мне нужно сделать количество значений для поля. Является ли это возможным ? помощь будет оценена.

-AVI

Ответы [ 3 ]

5 голосов
/ 29 апреля 2011

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

значение поля командного ключа

HSET 1000 состояние "ca"

HSET 1000 zip "95054"

INCR около

HSET 2000 состояние "ca"

HSET 2000 zip "95050"

INCR около

HSET 3000, состояние "ny"

HSET 3000 zip "12345"

INCR ny

Если вы хотите получить, сколько хеш-ключей с состоянием "ca" используйте:

GET CA

1 голос
/ 29 апреля 2011

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

key              value
city:1000:state  "ca"
city:1000:zip    "95054"
city:2000:state  "ca"
city:2000:zip    "95050"

Теперь вернемся к вашему вопросу ... В SQL вы можете сделать что-то вроде: SELECT Count (*) ОТ городов, ГДЕ состояние = 'CA'. Или, может быть, если вы хотите подсчет для каждого штата ... ВЫБЕРИТЕ состояние, COUNT (*) ИЗ городов, состояние GROUP BY.

На мой взгляд, это то, с чем Redis немного борется, но это дает вам возможность переосмыслить дизайн вашей базы данных. Если вы планируете часто выполнять такой запрос, рассмотрите возможность создания нового отсортированного набора состояний. Счет будет вашим счетом в этом случае. Используйте ZINCRBY для этого набора (назовем его city_count_by_state), когда вы добавляете / удаляете записи в / из таблицы ваших городов. Теперь ваш запрос выглядит примерно так: ZRANK city_count_by_state 'CA'. Добавление / удаление / получение рейтинга в отсортированном наборе выполняется за время O (log (n)).

Если вы не хотите тратить память с отсортированным набором, вы можете использовать KEYS , чтобы получить большой список всех ваших ключей в «таблице» городов. Затем ваша программа может автоматически перебирать эти ключи и подсчитывать, сколько городов имеет состояние «CA». Это немного ручного труда, но он все равно будет выполняться за O (n) времени.

Если у вас уже есть данные о городе, предварительно заполненные в вашей базе данных, вы также можете создать свой отсортированный набор, используя KEYS (см. Метод, описанный выше). Надеюсь, это поможет!

См:

0 голосов
/ 04 мая 2011

Предполагая, что вы отвечаете за вставку значений в хеш, затем используйте MULTI / EXEC, чтобы обернуть вставки хешей и соответствующие INCRS. Так что используйте подход ptzOn, но не забудьте обернуть все это в MULTI / EXEC, чтобы иметь атомарную семантику. Сделайте то же самое для удаления хешей и используйте DECR.

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