Вопрос

Недавно я учусь Redis и честно, очень впечатлен и умираю, чтобы использовать его. Одна из вещей, которые продолжают беспокоить меня, это «Как я запрашиваю редис». Быть специфическим, я пытаюсь решить после

Скажем, у меня есть миллионы хэшей, хранящихся ниже

usage:1 = {created: 20100521, quantity:9, resource:1033, user:1842, ...}
usage:2 = {created: 20100812, quantity:3, resource:7233, user:1842, ...}
usage:3 = {created: 20100927, quantity:4, resource:1031, user:76, ...}

Обратите внимание, что в хэши есть много ключей, которые я показал только 4. Теперь, когда я хочу найти записи в определенном диапазоне дат, пользователем по ресурсу или для пользователя в данный период.

Я подозреваю, что есть удельные модели Redis, чтобы получить такие данные. Я программист Python. Я посмотрел на Redisco (OHM Port), который поддерживает некоторое место, но я не уверен, что он получает все данные, а затем фильтры в Python.

Это было полезно?

Решение

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

Например, если вы хотите сделать запрос диапазона даты по набору данных, вы можете хранить эти данные в качестве отсортированного набора, в котором клавиши - это элементы данных, которые вы хотите запросить, и счет является временем UNIX.

В вашем примере выше, я могу сохранить свой пример хеш как:

 user_to_resource:i = user:j                   # key -> value forward map
 resources => (resource:i, created_timestamp)  # sorted set
 count_resource:i = quantity                   # key -> value quantity map

То есть у меня будет много свободных и обратных карт в зависимости от узоров запросов, которые я хотел бы поддержать.

Другие советы

Запросы, которые вы упоминаете, сильно зависят от времени. В этом случае вы будете разумно использовать отсортированный набор. Вы можете использовать штамп DateTime в качестве оценки для каждой записи.

Например, вы можете сделать следующее:

hmset usage:1 created 20100521 quantity 9 resource 1033 user 1842
hmset usage:2 created 20100812 quantity 3 resource 7233 user 1842
hmset usage:3 created 20100927 quantity 4 resource 1031 user 76

zadd usage 20200521 1
zadd usage 20100812 2
zadd usage 20100927 3

Чтобы получить все:

sort usage get 
# get usage:*->created get usage:*->quantity get usage:*->resource get usage:*->user

или

lrange usage 0 -1

Чтобы получить индексы диапазона:

zrangebyscore usage 20100800 20100900

Для запросов на основе значения хеш-ключевого значения есть полезное дополнение к Redis, которое позволяет использовать сценарии, написанные в LUA. Вы можете легко написать простой сценарий LUA в Python Heredoc и использовать метод Redis.eval для передачи сценария для Redis. Сценарий может быть циклом, который фильтры, основанные на значении, которое вы ищете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top