ruby-on-rails - Rails 缓存 : replacement for expires_in on Rails. cache.fetch

标签 ruby-on-rails

在保持“获取或设置”缓存调用的简洁性的同时清除此警告的最佳方法是什么?我真的很喜欢不必先获取,然后检查零,然后设置...

# DEPRECATION WARNING: Setting :expires_in on read has been deprecated in favor of setting it on write.

@foo = Rails.cache.fetch("some_key", :expires_in => 15.minutes) do
    some stuff
end

最佳答案

I really like not having to do a get, then check for nil, then set...



是的,您会希望避免在每次通话时都这样做,但您仍然必须至少这样做一次。像这样简单的事情可能对你有用:
def smart_fetch(name, options, &blk)
  in_cache = Rails.cache.fetch(name)
  return in_cache if in_cache
  val = yield
  Rails.cache.write(name, val, options)
  return val
end

然后在您的 View 中,您可以执行以下操作:
@foo = smart_fetch("some_key") do
  some stuff
end

请注意,Rails 缓存存储有一个默认的过期时间,您可以在创建它时设置它,因此除非您需要不同的过期时间,否则您可能不需要在每次调用时覆盖它。

关于ruby-on-rails - Rails 缓存 : replacement for expires_in on Rails. cache.fetch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6157059/

相关文章:

javascript - Rails 4 - 不包含 js 或图像的 heroku 生产版本

ruby-on-rails - Unicorn & Pry in Rails

ruby-on-rails - 每次在开发模式下加载Rails时,如何创建ssh隧道?

ruby-on-rails - 使用 Rails 3.1 预编译 Assets

ruby-on-rails - ruby rails : How to add "aria-hidden=' true'"with link_to

ruby-on-rails - 使用 Gerrit 部署 Ruby on Rails 数据库

ruby-on-rails - NoMethodError(Heroku 的 Logger 未定义方法 `flush'

ruby-on-rails - 在 Devise 中设置语言

ruby-on-rails - 根据匹配条件替换数组元素的优雅方法是什么?

ruby-on-rails - 如何更改使用的默认 Rails 版本?