2013-10-26 9 views
9

私はredis-railsを使用しています。キャッシュキーのために私は、配列を使用しています:rails部分一致を使用してキャッシュキーを削除する方法

Rails.cache.fetch([self.class.name, :translated_attribute, id, field, I18n.locale]) do 
    self.read_attribute field, locale: I18n.locale 
end 

は、今私は[:translated_attribute、ID self.class.name、]とキーが一致すると、すべてのキャッシュを削除する必要があります。私は部分一致のためにキーの後にワイルドカード(*)を取るdelete_matchedがあることを知っています。

しかし、私は生成された正確な鍵は何か分かりません。今私はキーとして配列を使用するときにキーを作る方法を知る必要があります。私は[:foo、:bar、:dum]をキャッシュキーとして使用すると、キャッシュストアの正確なキーは何ですか?

答えて

22

デフォルトレールはキー形式はキャッシュ:[クラス]/[ID] - [タイムスタンプ]

操作することが容易になるので、私は通常、代わりに私は自分のキーを作成し、レールのデフォルトのキャッシュキーの形式を使用してはいけません赤ちゃんで

cache_key = "#{self.class.name}/#{translated_attribute}/#{id}/#{field}/#{I18n.locale}" 

Rails.cache.fetch(cache_key) do 
    self.read_attribute field, locale: I18n.locale 
end 

Rails.cache.delete(cache_key) 
Rails.cache.delete_matched("#{self.class.name}*#{id}*") 
+1

これは、データストアとしてのmemcacheでは機能しません。他のオプションはありますか? –

+0

生産時に 'delete_matched'を使うことに注意してください: ' '' '' '' '' '' '' '' '' '' '' '' '' '' 'パフォーマンスノート:データベースに格納されます。大規模なRedisキャッシュを使用するユーザーは、この方法を使用しないでください。 "' ' http://www.rubydoc.info/gems/redis-activesupport/4.0.0/ActiveSupport%2FCache%2FRedisStore:delete_matched – DFish

関連する問題