Как сохранить количество просмотров вопроса в памяти? - PullRequest
1 голос
/ 18 июня 2010

Мой сайт похож на stackoverflow, есть много вопросов. Я хочу записать, сколько раз был посещен вопрос. У меня есть столбец с именем "view_count" в таблице вопросов, чтобы сохранить его.

Если пользователь посещает вопрос много раз, view_count должно быть увеличено только на 1. Поэтому я должен записать, какой пользователь посетил какой вопрос, и я думаю, что сохранять эту информацию в базе данных слишком дорого, поскольку записи будет огромным Итак, я хотел бы сохранить информацию в памяти и сохранять номер в базе данных каждые 10 минут.

Я искал "кеш" в Rails, но я не нашел пример. Я хотел бы простой пример, как это сделать, спасибо за помощь ~

Ответы [ 2 ]

0 голосов
/ 18 июня 2010

Во-первых, я бы предположил, что ваше мнение об использовании базы данных для этого было бы слишком дорогим для хранения, является недействительным. Само хранилище дешево, и я сомневаюсь, что набор записей получит такой огромный. Кроме того, при правильной индексации эта таблица будет быстро доступна (и в основном это будет доступ для чтения с довольно уникальными ограничениями). Но это ваше решение, а не мое :) 1001 *

Одной из идей было бы использование файлов cookie - это было бы действительно очень легко, хотя у вас есть ограничение по размеру, с которым можно справиться, что может немного усложнить ситуацию.

Проблема с памятью (и memcache) заключается в том, что она не постоянна. При следующей загрузке среды приложения данные сбрасываются. Поэтому для постоянного хранения вам все еще нужна какая-то база данных или постоянная очередь (например, Redis).

0 голосов
/ 18 июня 2010

Эта статья довольно удивительна - если у вас есть возможность использовать Memcache, я думаю, она очень вам поможет: http://www.ridingtheclutch.com/2009/01/08/cache-anything-easily-with-rails-and-memcached.html

если бы вы могли сделать что-то вроде:

if CACHE.get(key) >= 10:
  send to db
  CACHE.set(key, 0, 1.hour)
else:
  newcount = CACHE.get(key) + 1
  CACHE.set(key, newcount, 1.hour)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...