有没有人知道为什么每次读取缓存片段时rails似乎都会重新计算“expires_in”的值?
cache("usecase_#{usecase.id}", :expires_in => "#{usecase.minutesToNextRun}".to_i.minutes) do
some code
end
如果我检查日志,我会看到每次读取缓存片段时调用usecase.minutesToNextRun
方法(这非常昂贵并且会降低应用程序速度)。
通常情况下,我希望rails只计算一次:expires_in
值,然后将此值(例如5分钟)与当前时间(伪代码)进行比较。
if time_the_fragment_was_stored + expires_in > now
do nothing
else
re-render fragment
end
有没有人有任何提示/想法如何防止每次读取片段时rails重新计算到期时间?
答案 0 :(得分:0)
在此部分代码之前(或在您的控制器或演示者中):
cache("usecase_#{usecase.id}", :expires_in => "#{usecase.minutesToNextRun}".to_i.minutes) do
some code
end
试试这个:
@minutes_to_next_run ||= usecase.minutesToNextRun
在上面的示例中,如果@minutes_to_next_run
为nil
,则将其设置为usecase.minutesToNextRun
。如果它有值,则使用它。如果你在语义上阅读它,那就有意义了:
@minutes_to_next_run或@minutes_to_next_run = usecase.minutesToNextRun
here是关于此
的(非常)确定的答案