rails如何使用部分匹配删除缓存键

时间:2013-10-26 06:18:58

标签: ruby-on-rails caching

我正在使用redis-rails。对于缓存键,我使用的是数组:

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

现在我需要删除与[self.class.name,:translated_attribute,id]的键匹配的所有缓存。我知道它有delete_matched在部分匹配的密钥之后采用通配符(*)。

但我不知道生成的确切密钥是什么。现在我需要知道当我们使用数组作为键时它是如何产生键的。我的意思是,如果我使用[:foo,:bar,:dum]作为缓存键,那么缓存存储中的确切键是什么?

1 个答案:

答案 0 :(得分:29)

默认的rails缓存密钥格式为:[class] / [id] - [timestamp]

我通常不使用rails默认缓存键格式,而是创建自己的键,以便在redis中更容易操作。

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}*")