Счетчик просмотров страниц с Rails и Memcached - PullRequest
1 голос
/ 26 февраля 2010

Я пытаюсь реализовать счетчик просмотров страниц с помощью Rails и memcached. Каждый раз, когда я отрисовываю страницу, через рельсы я увеличиваю ключ memcached (key.incr атомарный). Мое главное беспокойство - возможность истечения срока действия или удаления этого ключа из memcached до того, как я обновлю свою запись в БД. Даже если я посещу все ключи с частотой, превышающей время их истечения, memcached может удалить ключ в это время из-за заполнения памяти.

Есть предложения? Спасибо Димитрис

Ответы [ 2 ]

5 голосов
/ 26 февраля 2010

Я бы пошел с redis в качестве memcached замены . Это идеально подходит для статистики в реальном времени . Это дает вам скорость и атомные приращения, которые вы хотите, плюс это сохраняется. Проблема решена.

1 голос
/ 26 февраля 2010

Если вы хотите, чтобы эти данные были постоянными, вы не должны записывать их в memcache (что является механизмом кэширования, а не хранилищем данных) .

По сути, то, что я, вероятно, сделал бы, было бы так:

  • При попытке получить счетчик для страницы:
    • Проверьте, хранится ли он в memcache
      • если да, используйте его
      • если нет, извлеките его из БД и сохраните в memcache
  • При попытке написать счетчик (т.е. счетчик + = 1) :
    • Запись данных в базу данных (update ... set counter = counter + 1 where...)
    • выбрать данные обратно из базы данных; Может помочь перенос как обновления, так и выбора в транзакции: изоляция - это то, что базы данных делают хорошо.
      • и немедленно записать его в memcache, чтобы он соответствовал следующей операции «get»


Но я бы не использовал memcache для настойчивости:

  • Я бы никогда не записал в memcache данные, которые не были записаны в базу данных
  • персистентность - это работа базы данных; не кеширующий движок.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...