2014-10-03 5 views
1

Я хочу создать аналитику с помощью Redis - основные счетчики для каждого объекта, в час/день/неделю/месяц/год и общая структура данныхRedis ключ схема для аналитики

, что Redis будет эффективным для этого, и как я могу избегать многократных вызовов redis?

бы лучше, чтобы каждая модель имеет эти наборы ключей:

хэш - model:<id>:years => каждый год имеет счетчик

хэш - model:<id>:<year> => каждый месяц имеет счетчик

хэш - model:<id>:<year>:<month> => каждый день имеет счетчик

хэш - model:<id>:<year>:<month>:<day> => каждый час имеет счетчик

Если эта схема верна, как бы я нарисую эти данные, не делая много вызовов для redis? Мне нужно было бы весь цикл в model:<id>:years и получить месяц, затем цикл в месяц и т. Д.? Или я просто хватаю все поля и их значения из всех ключей как пакетный запрос, а затем обрабатываю их на сервере?

ответ

3

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

Для диапазона дат вы будете использовать model:<id>:<year>:<month>, для диапазона часов (с использованием model:<id>:<year>:<month>:<day>) и так далее ...

В самом деле, если диапазон дат больше, чем месяц (например, с 1 января 2014 года по 20 марта 2014 года), вам нужно будет получить несколько zset (, model:<id>:2014:02 и model:<id>:2014:03) и объединить результаты.

Если вы действительно хотите использовать диапазон дат внутри одного запроса, вы всегда можете хранить данные о точности дня внутри model:<id>:<year>. И если вы хотите обрабатывать диапазон дат в течение нескольких лет, вам просто нужно иметь один zset, например. model:<id>:byDay.

Однако обратите внимание, что сохранение исторических данных увеличит потребление памяти с течением времени, поэтому вы должны уже думать о data retention. С Redis вы можете либо использовать EXPIRE на zset, либо сделать это сами с помощью кронов.

+0

спасибо, поэтому я использую один zset для каждой модели, и когда я хочу получить данные, я использую ZRANGEBYSCORE, где я поставлю min и max как диапазоны дат? есть ли место для просмотра памяти zset, чтобы знать, как далеко назад сохранить данные? –

+1

1/Действительно. 2/redis-cli info или Redsmin помогут вам отслеживать использование глобальной памяти, но, к сожалению, вы не сможете визуализировать потребление памяти на zset. – FGRibreau

+0

Как я могу увеличить значение членов? так как оценка - это дата, которую я не могу использовать ZINCRBY –

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