Стратегия кеширования для рельсов, где появление новых объектов делает кеш недействительным - PullRequest
1 голос
/ 18 января 2012

Я не вижу ничего очевидного в отношении кеширования стратегий в рельсах.

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

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

Хорошо ли справляется кэширование рельсов? Я вижу примеры того, как при обновлении активного объекта записи вы завершаете кеш и заставляете обновленный объект быть восстановленным снова - но я хочу, чтобы коллекция объектов (например, Price.find (: all) кэшировалась до Price.find (: все) содержит новый объект. Поэтому добавление новой строки в базу данных приведет к истечению срока действия кэша и форсированию нового поиска - новая цена может быть самой последней в течение нескольких дней или может длиться всего несколько минут.)

Если не очевидно, это первый раз, когда я смотрю на кеширование. Я попытаюсь развернуть memcache на героку.

Большое спасибо!

Редактировать : Просто подумал, что было бы полезно указать, что контроллеры rails только отдают запросы JSON - богатое одностраничное приложение - поэтому основные вещи для кеширования - это запрос к базе данных. Вот почему меня это смущает, я вижу частичное кэширование, кэширование страниц, но я изо всех сил пытаюсь понять тип кэширования, который я надеюсь описать выше.

Dave

1 Ответ

0 голосов
/ 18 января 2012

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

cached_prices = Rails.cache.fetch("cached_prices", :expires_in => 300) do
    Price.find(:all)
end

Приведенный выше код кэширует запрос на 5 минут (300 секунд).Чтобы вручную удалить запись кэша (например, при создании новой записи цены), позвоните по следующему номеру:

Rails.cache.delete("cached_prices")

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

Вы можете найти гораздо больше информации о всех доступных вам видах кэширования здесь: http://guides.rubyonrails.org/caching_with_rails.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...