Каков наилучший способ кэширования разбитого на страницы результата с помощью рельсов и memcached?pagination и memcached in rails
Например, сообщений контроллер:
def index
@posts = Rails.cache.fetch('all_posts') do
Post.paginate(:conditions => ['xx = ?', yy], :include => [:author], :page => params[:page], :order => 'created_at DESC')
end
end
Это, очевидно, не работает, когда params[:page]
изменения. Я могу изменить ключ на "all_posts_#{params[:page]}_#{params[:order]_#{last_record.created_at.to_i}"
, но тогда может быть несколько возможных заказов (последние, популярные, большинство проголосовавших и т. Д.), И будет комбинация страниц и заказов ... много ключей таким образом.
Проблема №2 - Кажется, что, когда я реализую это решение, кэши записываются правильно, и страница загружается нормально во время первого вызова разворачиваемого действия. Когда я нажимаю на той же странице, то есть на странице 1, с заказом recent
, кажется, что браузер даже не звонит на сервер. Я не вижу, чтобы какое-либо действие контроллера вызывалось в журнале производства.
Я использую пассажирские, REE, memcached и rails 2.3.5. Firebug не показывает, что запросы не были сделаны ....
Есть ли простой или более грациозный способ обращения с этим?
Спасибо. Для второй проблемы, я думаю, этот другой вопрос может дать вам больше намеков. http://stackoverflow.com/questions/3743268/max-age-with-nginx-passenger-memcached-rails2-3-5. по какой-то причине максимальный возраст устанавливается, хотя я ничего не делаю в своем приложении rails, все еще пытаюсь понять проблему. Я слышал, что nginx - это обратный прокси-сервер, возможно, он имеет какое-то отношение к этому? – badnaam
с этим "заказом (" updated_at DESC "). Первый подход, будет ли этот запрос запускаться каждый раз, когда приходит запрос? – badnaam
Да, он будет запускаться каждый раз, если вы не объедините это с другим кэшированием. Но вообще нет другого способа сделать это. Вы должны проверить, действителен ли кеш, просматривая вашу базу данных. Но в большинстве случаев эта скорость все равно. – mdrozdziel