2013-07-24 3 views
6

Я использую следующее кэширование низкого уровня для пяти самых последних новостных статей в моем приложении Rails:вручную истекаешь кэш низкого уровня

@recent_news = Rails.cache.fetch("recent_news", :expires_in => 1.hour) do 
    News.order("created_at desc").limit(5) 
end 

Есть ли способ, чтобы сохранить этот кэше запросов, пока новые новости статья создана? Я думал вручную истекающий кэша с помощью наблюдателя, но не был уверен, есть ли способ действительно сделать это, например:

class NewsObserver < ActiveRecord::Observer 
    def after_create 
    #expire recent_news cache 
    end 
end 

ответ

10

Вы можете вручную истекают кэша с помощью .delete метода:

Rails.cache.delete("recent_news") 
+0

Я бы также расширил вашу команду fetch, чтобы включить: '(race_condition_ttl: 10)' Это будет использовать новый набор для новостей @recent, запустив один запрос, когда истечет время истечения. Вместо возможности запуска многих запросов, когда он истекает до того, как будет установлен кеш. – Shadoath

Смежные вопросы