Rails expire_fragment 好像无效了

lukefan · 2015年10月02日 · 最后由 lukefan 回复于 2015年10月03日 · 1982 次阅读

我一直在用 expire_fragment 做 cache 失效处理,但是某天手贱,用了个 bundle update,不知道升级了什么,好像就失效了。 现在,我执行了 expire_fragment('page/[\s\S]*? ‘) 但是从输出的日志看,好像根本没有其效果的样子啊。

Expire fragment views/page/[\s\S]? (0.7ms) Expire fragment views/resource/ (0.6ms) Cache digest for app/views/resource/index.html.erb: 7b3bb52fd4faa42a16f63b77ae0a99b8 Read fragment views/page/1/title/7b3bb52fd4faa42a16f63b77ae0a99b8 (0.8ms) Cache digest for app/views/resource/index.html.erb: 7b3bb52fd4faa42a16f63b77ae0a99b8 Read fragment views/page/1?/7b3bb52fd4faa42a16f63b77ae0a99b8 (1.1ms) Rendered resource/index.html.erb within layouts/application (4.3ms)

另外,看了https://ruby-china.org/topics/21488 之后,好像根本就不需要手动处理失效问题了,只要修改数据库,自然就失效了,不过我这里看到的好像并不是这样的情况。

Note: Regexp expiration is only supported on caches that can iterate over all keys (unlike memcached).

http://api.rubyonrails.org/classes/ActionController/Caching/Fragments.html#method-i-expire_fragment

这个方法以前是可以工作的。 我重新尝试了:

expire_fragment(%r{page\/[\s\S]*})
expire_fragment('page\/[\s\S]*')

依然无效。 是不是 cache 生成代码太复杂了? 上面那句话的意思,是我的 cache 可以通过 key 标示?

<% cache [:page, "#{params[:page]||1}?#{params[:q]||''}", latest_page_update.to_s] do %>
需要 登录 后方可回复, 如果你还没有账号请 注册新账号