Я собираюсь предположить, что приведенные выше данные являются списком городов. На самом деле, вы можете хранить их как ...
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 (см. Метод, описанный выше). Надеюсь, это поможет!
См: