为什么此代码块在 Rails.cache.fetch 之后执行
Why does this codeblock execute after Rails.cache.fetch
我有这行代码,它完全按照我的意愿执行。但我不知道它为什么有效。
Rails.cache.fetch(key, expires_in: 1.day) do
a << b
end
如果 Rails 缓存中不存在键,它应该做的是将 b 添加到 a。
为什么我很困惑?
Rails.cache.fetch(key, expires_in: 1.day)
returns 无,无论密钥是否已在缓存中。
问题:
为什么当缓存中没有密钥时代码会阻塞 运行,而在其他情况下不会 运行?
额外详细信息:Rails 缓存已连接到 Redis。
尽管 Rails.cache.fetch
returns nil
对 do ... end
块进行求值可能会造成混淆。但是 do ... end
块不会 运行 在 nil
响应之上。
事实上,do ... end
块是 fetch
方法调用的附加参数。看看 source code of fetch
。
没有块 fetch
基本上只做一件事——在第 328 行调用 read(name, options)
。但是有了块,它就更多了(第 307 到 324 行)
我有这行代码,它完全按照我的意愿执行。但我不知道它为什么有效。
Rails.cache.fetch(key, expires_in: 1.day) do
a << b
end
如果 Rails 缓存中不存在键,它应该做的是将 b 添加到 a。
为什么我很困惑?
Rails.cache.fetch(key, expires_in: 1.day)
returns 无,无论密钥是否已在缓存中。
问题: 为什么当缓存中没有密钥时代码会阻塞 运行,而在其他情况下不会 运行?
额外详细信息:Rails 缓存已连接到 Redis。
尽管 Rails.cache.fetch
returns nil
对 do ... end
块进行求值可能会造成混淆。但是 do ... end
块不会 运行 在 nil
响应之上。
事实上,do ... end
块是 fetch
方法调用的附加参数。看看 source code of fetch
。
没有块 fetch
基本上只做一件事——在第 328 行调用 read(name, options)
。但是有了块,它就更多了(第 307 到 324 行)