60.minutes) do return-6ren">
gpt4 book ai didi

ruby-on-rails - 从传递给 Rails.cache.fetch 的 block 返回 nil 值会清除它吗?

转载 作者:行者123 更新时间:2023-12-03 00:19:52 26 4
gpt4 key购买 nike

假设我有一个这样的方法:

  def foo
Rails.cache.fetch("cache_key", :expires_in => 60.minutes) do
return_something
end
end

return_something 有时会返回 nil 值。发生这种情况时,我不希望将 nil 值缓存 60 分钟。相反,下次调用 foo 时,我希望再次执行传递给 fetch 的 block 。

默认情况下Rails.cache.fetch是这样工作的吗?或者我必须实现这个功能吗?

更新(含答案)

事实证明,答案是否定的,至少在使用 Memcached 时是这样。

最佳答案

这取决于您正在使用的缓存存储的实现。我想说它不应该缓存 nil 值,但空字符串可以缓存。

dalli store implementation即:

  def fetch(name, options=nil)
options ||= {}
name = expanded_key name

if block_given?
unless options[:force]
entry = instrument(:read, name, options) do |payload|
payload[:super_operation] = :fetch if payload
read_entry(name, options)
end
end

if !entry.nil?
instrument(:fetch_hit, name, options) { |payload| }
entry
else
result = instrument(:generate, name, options) do |payload|
yield
end
write(name, result, options)
result
end
else
read(name, options)
end
end

关于ruby-on-rails - 从传递给 Rails.cache.fetch 的 block 返回 nil 值会清除它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12891790/

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