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= может варьироваться в зависимости от того, как вы обрабатываете другие данные в приложении. Может также быть более элегантное решение, чем это, но это то, что пришло на ум.

Другие вопросы по тегам