2013-11-03 2 views
1

Я пишу флеш-приложение, которое будет подсчитывать просмотры страниц с нескольких сайтов. Я решил использовать Redis и Redispy, но мне сложно решить, как структурировать. Первоначально я пытался иметь что-то вроде этогоRedis page counter

redis.set("date:YYYYMMDD:site:sitename", 1) 

Я хочу, чтобы иметь возможность запросить по дате или по названию сайта и отображать значение счетчика. Я пытался использовать .keys для запроса по дате или имени сайта, но документы REDIS говорят, чтобы избежать использования ключей.
Тогда я подумал, что я могу использовать Redis хэш:

redis.hset("date:YYYYMMDD", "site", "sitename") 
redis.hset("counter", 1) 

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

Любые предложения были бы высоко оценены! Раньше я не использовал REDIS.

ответ

0

Для подсчета, вы можете использовать incr/decr команду

http://redis.io/commands/incr

Когда вы получаете доступ, приращение счетчика, как это:

 
    > incr counter:site2:20131101 
    (integer) 1 
    > incr counter:site1:20131103 
    (integer) 1 
    > incr counter:site1:20131103 
    (integer) 2 
    > incr counter:site2:20131103 
    (integer) 1 

При запросе счетчиков, сначала нужно получить все ключи, то подытожить все счетчики в вашем приложении.

 
    > keys counter:site2:* # query by site 
    1) "counter:site2:20131101" 
    2) "counter:site2:20131103" 
    > get "counter:site2:20131101" 
    "1" 
    > get "counter:site2:20131103" 
    "1" 
    > keys counter:*:20131103 # query by date 
    1) "counter:site1:20131103" 
    2) "counter:site2:20131103" 
    ... 
+0

Эй, колчан, спасибо за ответ! Я был обеспокоен отказом на странице Redis об использовании KEYS в производственной среде. http://redis.io/commands/keys. Я не уверен, есть ли другой метод, который я должен использовать вместо KEYS. Есть ли какая-либо польза для присвоения имени счетчику: ...? – Ptrkcon

+1

Я не пробовал «ключи» для больших наборов данных, поэтому я не знаю, насколько хорошо он масштабируется. Кроме того, итеративная работа находится в стадии разработки, но она не поддерживается до стабильного выпуска. http://antirez.com/news/63 Это может сделать подсчет более легким в будущем. Redis подходит для работы с ключом. Если вам нужен тонкий контроль над отчетами, вы должны хранить наборы данных в других базах данных, на мой взгляд. – quiver

+0

Спасибо за эту ссылку. Я буду следить за этой функцией, это определенно упростит ситуацию. Что касается отчетности, я просто хотел бы запросить дату, диапазон дат и имя сайта. Я думаю, что все это можно сделать в настоящее время с ключами. – Ptrkcon

1

В целом приращение счетчиков, такие, как описано, структура вдоль линий this answer будет доказано способом сделать это. В приведенном ответе более подробно рассматривается использование отсортированных наборов для данных временных рядов, таких как это. У него даже есть методы для свертывания данных (возможно, вы также хотите сообщить о ежемесячных данных).

Если, как показывают ваши примеры, ваше разрешение ежедневно является структурой, которая хранит данные в сортированном наборе с именем сайта/доменом в ключе и использует ежедневную метку времени, а [ZINCRBY][2] будет служить вам хорошо.

Что касается keys ... нет. Просто не надо.

В качестве альтернативы вы устанавливаете для хранения ключей при использовании доменов/имен файлов в качестве вашего идентификатора. Всякий раз, когда вы запускаете ZINCRBY для имени сайта/домена, также выполняйте операцию SADD на «индексном ключе», например sites-with-traffic:YYYY:MM:DD. Таким образом вы можете вытащить множество уникальных сайтов за этот день и построить свои запросы для каждого из них.

В своем описании вы говорите, что можете сообщить о данных днях. Способ сделать это с помощью Redis - просто запросить ключевые данные, если они будут там. Если вы ничего не получите, трафик за этот период равен 0. Не запрашивайте, когда у вас есть набор параметров - используйте их. Единственный из этих шаблонов запросов, которые вы указали, которые, возможно, были бы неизвестны, - это вышеупомянутое имя сайта/домена, и их добавление к набору решит эту потребность.