ruby – 手动生成Rails缓存密钥
我正在尝试使用孤立的工作程序来构建和操作我的缓存.我想让这些工人尽可能地精益求精. (不要使用铁轨)
我很难伪造rails生成的缓存键 在我看来,我有这个: cache ["comments",@ama] 我正在尝试使用以下内容复制它生成的密钥: 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 该密钥的缓存为空. 要么我没有正确格式化我的密钥,要么缺少缓存.我有95%的信心我正在寻找的缓存就在那里. (我可以使用诸如’test’之类的密钥来推送缓存,然后将其恢复.所以我知道缓存正在运行) 有用的参考: > http://apidock.com/rails/ActiveRecord/Base/cache_key 有用的信息: >缓存服务器不是本地的,是的我指向它. 解决方法
实现低级缓存的最有效方法是使用Rails.cache.fetch方法.如果可用,它将从缓存中读取一个值;否则它将执行传递给它的块并返回结果:
您可以从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 我认为这对你有所帮助. 谢谢. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |