gpt4 book ai didi

ruby-on-rails - 使用 Dalli 和 memcached 获取缓存值

转载 作者:行者123 更新时间:2023-12-04 06:24:34 25 4
gpt4 key购买 nike

我正在尝试使用 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'

现在有没有办法取回片段缓存?还是去看?我试过:
Rails.cache.fetch('home_main')

但这不起作用。有没有办法让我看到缓存键列表?

谢谢

编辑 #1

对于@ cpuguy83 - 很明显,以 196 毫秒的时间进入数据库 :-(
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)

最佳答案

片段缓存以您的地址和 URL 为缓存添加前缀......所以您的 key 最终是这样的:

localhost:3000/your/URL/cache_key

您可以通过查看开发日志来了解它使用的 key 。

此外,通过在 View 中调用缓存自动完成从缓存中提取项目。
当您加载页面时,它会检查缓存中的项目是否有效,如果是,则抓取它,如果不是,则重新生成 HTML 并将其存储在缓存中。

此外,如果您只想从缓存中读取,您应该使用 Rails.cache.read , Rails.cache.fetch如果 key 有效,则通常从缓存中抓取,如果没有使用提供的块写入缓存。

所以: 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 时间戳并将其嵌入用于存储缓存项目的 key 中。

退房 http://www.broadcastingadam.com/2012/07/advanced_caching_part_1-caching_strategies/有关缓存的精彩教程。
还处理自动过期缓存的非常好的技巧,而无需使用基于时间的缓存过期或缓存清除器。

关于ruby-on-rails - 使用 Dalli 和 memcached 获取缓存值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12445809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com