Rails 3.1 подстановочный кеш истекает для действия со строкой запроса
У меня есть страница, где на где index
действие показывает список сообщений с пользовательскими столбцами сортировки, нумерацией страниц и т. д. Хотя я могу кэшировать каждую отдельную страницу / параметр сортировки с помощью
cache(:direction => params[:direction], :sort => params[:sort], :page => params[:page]) do
Я не могу истечь все это сразу, используя один вызов expire_action
(что является проблемой). я знаю expire_action
имеет параметр регулярного выражения, но это грязно (использование регулярного выражения для поиска ключей, созданных с помощью хэша), и я использую memcached, который не будет работать.
Как я могу истечь все члены кеша действия одним вызовом expire_action
? Если это невозможно, можете ли вы порекомендовать другие варианты кэширования?
1 ответ
Я бы порекомендовал просмотреть этот пост о кешировании в Rails, это очень тщательный пост, в котором рассматриваются различные стратегии, которые могут обеспечить результат, который вы ищете в этой ситуации.
Хотя он не упоминает об этом в посте, добавление какого-либо параметра очистки кеша (например, идентификатора версии кеша) в список аргументов может предоставить вам способ истечения срока действия кеша более универсальным способом. Например:
cache(:version => Posts.cache_version, :direction => params[:direction], :sort => params[:sort], :page => params[:page]) do
# Later on to bust the cache
Posts.cache_version = 2
Детали того, как вы хотели бы реализовать cache_version
а также cache_version=
может варьироваться в зависимости от того, как вы обрабатываете другие данные в приложении. Может также быть более элегантное решение, чем это, но это то, что пришло на ум.