我正在尝试使用Dalli与Rails应用程序中的缓存存储进行交互。我正在做片段缓存,并设置了我的开发配置:
#config.action_controller.perform_caching = true
config.cache_store = :dalli_store
因此它不会缓存所有内容。我对缓存感兴趣的片段是这样的:
<% cache("home_main", :expires_in => 1.minute) do %>
<div class='tabbed-content content-1'>
<%=render :partial => 'shared/launch-main', :locals => { :locations => @locations } %>
</div>
<% end %>
当我进去跑步时
ruby-1.9.2-p290 :019 > Rails.cache.stats
ruby-1.9.2-p290 :019 > y _
我明白了:
conn_yields: '0'
bytes: '17153'
curr_items: '1'
total_items: '5'
evictions: '0'
reclaimed: '0'
现在有办法找回那个fragement缓存吗?或者看到它?我试过了:
Rails.cache.fetch('home_main')
但这不起作用。有没有办法让我看到缓存键列表?
THX
编辑#1
对于@ cpuguy83 - 所以很清楚地以196ms进入DB: - (
Read fragment views/home_main (2.4ms)
Rendered index/homepage_launch_main.html.erb (2.8ms)
Completed 200 OK in 1623ms (Views: 11.5ms | ActiveRecord: 195.8ms)
答案 0 :(得分:4)
片段缓存使用您的地址和URL为缓存添加前缀....因此,您的密钥最终会像:
localhost:3000/your/URL/cache_key
您可以通过查看开发日志来查看它使用的密钥。
此外,通过在视图中调用缓存,自动完成将项目拉出缓存。 当你加载页面时,它正在检查缓存中的项是否有效,如果是,那么它会抓取它,如果不是,它会重新生成HTML并将其存储在缓存中。
此外,如果您只想从缓存中读取,则应使用Rails.cache.read
,Rails.cache.fetch
通常是从密钥中获取,如果密钥有效,并且如果没有使用提供的块写入缓存
所以:
Rails.cache.read your_cache_key
只会读取返回与该缓存密钥一起存储的内容(如果有的话)
Fetch将像这样使用:
Rails.cache.fetch your_cache_key do
# Logic to generate items you want to cache
end
您视图中对<% cache @object do %>
的调用实际上是Rails.cache.fetch
我建议将缓存调用更改为:
<% cache ['home_main', @locations.order('updated_at DESC').first] do %>
# your html here
<% end %>
在这种情况下,缓存键基于最近更新的位置对象。如果某个位置已更新,则缓存将在下一个请求中丢失,并将重新生成。
这里的缓存是在最近更新的位置对象上调用cache_key
。 cache_key
从对象中获取updated_at时间戳,并将其嵌入用于存储缓存项的密钥中。
查看http://www.broadcastingadam.com/2012/07/advanced_caching_part_1-caching_strategies/以获取有关缓存的精彩教程。 还可以处理自动过期缓存的非常好的技巧,而无需使用基于时间的缓存过期或缓存清理程序。