【问题标题】:Rails 2 cache view helper not saving to memcachedRails 2缓存视图助手不保存到memcached
【发布时间】:2012-08-07 06:23:43
【问题描述】:

我有一个障碍

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

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

cache 将数据存储在哪里?

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

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

【问题讨论】:

    标签: ruby-on-rails caching memcached


    【解决方案1】:

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

    您可以使用fragment_cache_key 帮助程序来找出您对cache 的任何调用所使用的缓存键轨。如果您只想获取当前存储的内容,read_fragment 会这样做。当然,对于您的特定用法,如果您的块再次执行,那是因为 60 分钟已到:缓存的值已从 memcache 中删除。

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

    【讨论】:

    • 当我使用fragment_cache_key('a') 时,我得到了'views/a'。但是,“views/unique_key”仍然返回 nil。也许还有其他事情发生?
    • 你开启缓存了吗?(开发模式下默认关闭)
    • 我想我实际上并不知道。我需要 mem_cache_store 并运行 memcached。虽然没有太多活动
    • 所以启用了缓存,但我遇到了一个有趣的问题,就是我看不到流量,因为运行memcached -vv 没有绑定到正确的端口。当我尝试使用memcached -m 500 -l 127.0.0.1 -p 11211 -vv 手动设置它时,绑定到指定端口时出现问题。为了解决这个问题,我不得不退出控制台和服务器,然后杀死一个后台进程(由pgrep 11211 | xargs ps 找到)。然后运行 ​​memcached 命令并重新启动一切。然后我可以看到缓存命中/未命中飞过
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-22
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      相关资源
      最近更新 更多