我在我的应用程序中使用rails cache来缓存Active Record查询。我为Rails.cache.fetch
使用了一种常用方法,但它没有获取密钥。我在这里错过了什么吗?
author = cache_fetch("author_id:#{current_user.id}") do
Author.find(current_user.id)
end
在我的lib文件中:
cache_fetch(key)
Rails.cache.fetch(key,expires_in: 30.minutes)
end
答案 0 :(得分:3)
#fetch
接受一个块,如果在缓存中找不到密钥,则执行该块并返回其缓存值。你应该使用:
cache_fetch(key, options = {}, &block)
Rails.cache.fetch(key, options.reverse_merge(expires_in: 30.minutes), &block)
end
如果你没有通过该块,那么Rails将不知道在未命中的情况下要缓存什么,因此将无法返回任何内容。通过添加可选的options
密钥,您可以将覆盖传递到cache_fetch
,然后传递到#fetch
,同时仍然提供默认值。