gpt4 book ai didi

ruby - 手动生成 Rails 缓存键

转载 作者:数据小太阳 更新时间:2023-10-29 07:23:52 24 4
gpt4 key购买 nike

我正在尝试使用孤立的工作人员来构建和操作我的缓存。我想让这些 worker 尽可能精简。 (不要使用导轨)

我在伪造 rails 生成的缓存键时遇到困难

在我看来我有这个:

cache ["comments", @ama]

我正在尝试使用以下内容复制它生成的 key :

updated_at = Time.parse(row['updated_at'])
timestamp = updated_at.utc.strftime('%Y%m%d%H%M%S')
cache_key = "views/comments/amas/#{row['id']}-#{timestamp}"

将产生:

views/comments/amas/432-20121227010114

该键的缓存为空。

要么我没有正确格式化我的 key ,要么缓存丢失。我有 95% 的信心我正在寻找的缓存就在那里。

(我能够使用诸如“test”之类的键推送缓存,然后取回它。所以我知道缓存正在工作)

有用的引用:

有用信息:

  • 缓存服务器不在本地,是的,我指向它。
  • 即使 key 不存在,当我在生产环境中加载页面时, key 和缓存也会当场构建。我试过了。
  • 使用 Rails 4.0.0

最佳答案

实现低级缓存的最有效方法是使用 Rails.cache.fetch 方法。如果可用,它将从缓存中读取一个值;否则它将执行传递给它的 block 并返回结果:

您可以从 Rails 控制台手动设置缓存键(通过在命令提示符中键入“rails c”)

>> Rails.cache.fetch('answer')
==> "nil"
>> Rails.cache.fetch('answer') {1 + 1}
==> 2
Rails.cache.fetch('answer')
==> 2

考虑以下示例。一个应用程序有一个 Product 模型,它有一个返回所有缺货商品的类方法,以及一个在竞争网站上查找产品价格的实例方法。这些方法返回的数据非常适合低级缓存:

# product.rb

def Product.out_of_stock
Rails.cache.fetch("out_of_stock_products", :expires_in => 5.minutes) do
Product.all.joins(:inventory).conditions.where("inventory.quantity = 0")
end
end

def competing_price
Rails.cache.fetch("/product/#{id}-#{updated_at}/comp_price", :expires_in => 12.hours) do
Competitor::API.find_price(id)
end
end

我想这对你有帮助。

谢谢。

关于ruby - 手动生成 Rails 缓存键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17645223/

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