0

我有块

<% cache 'unique_key', 60.minutes.from_now do %>
  ...
  <% begin %>
    ...
  <% rescue %>
    ...
  <%end>
<% end %>

如果缓存中没有先前的值,我试图通过仅缓存(从而允许用户查看)救援消息来使实现更加健壮。目前,如果开始块中的响应由于任何原因发回错误,我正在缓存用户查看的错误消息。我宁愿回退到旧的缓存数据。我无法克服的问题是-

cache数据存储在哪里?

每次我尝试Rails.cache.read 'unique_key',我都会nil回来。不是cache将值存储在 memcached 中吗?有没有办法可以将缓存转储到屏幕上?

我无法遵循 Rails 源。在我看来,fragment_for方法中的方法cache是 rails 3 的东西,因此,我没有进一步调试。

4

2 回答 2

1

视图助手根据cache您给它的参数构造一个缓存键。它至少会在键中添加前缀“views/”。

您可以使用fragment_cache_key帮助程序找出您对cache. 如果您只想获取当前存储的内容,请read_fragment执行此操作。当然,对于您的特定用法,如果您的块再次执行,那是因为 60 分钟已到:缓存的值已从 memcache 中删除。

使用 memcache 存储,您无法列出当前存储中的所有键 - 这只是您的 memcached 本身不支持的东西。

于 2012-08-03T22:59:57.153 回答
0

我通过使用 fetch 方法解决了这个问题。我用了

<% Rails.cache.fetch('unique_key', :expires_in => 60.minutes){  
   begin
     ...
   rescue
     ...
   end
} %>

当我这样做时,我可以成功找到密钥。我仍然不确定为什么在添加fragment_cache_key我找到的数据后找不到缓存的数据,但使用Rails.cache.fetch似乎可以解决问题。

于 2012-08-06T22:23:43.503 回答