21

我正在使用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] 作为缓存键,缓存存储中的确切键是什么?

4

1 回答 1

37

默认的 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}*")
于 2013-10-26T06:51:23.840 回答