该条款工作正常:
if cache.get(cache_name):
events = cache.get(cache_name)
else:
events = self.get_google_events()
cache.set(cache_name, events, 60 * 10)
如果我在
get_google_events()
中放入打印语句,它仅在缓存过期时才打印,正如预期的那样。但是,如果我尝试将上述内容缩短为:events = cache.get_or_set(cache_name, self.get_google_events(), 60 * 10)
每次都会触发打印语句(即缓存被静默破坏)。第二种形式不等于第一种形式吗?
最佳答案
一点都不。 Python 必须在调用函数本身之前完全评估构成函数参数一部分的表达式。在您的第二种情况下,这意味着 self.get_google_events()
将始终在 get_or_set
之前被调用可以确定是否从缓存中检索该值。
另请注意,您的第一个案例可以稍微提高效率:按照您现在的方式,您要两次调用 get
不必要地。相反,只需制作一个:
events = cache.get(cache_name)
if not events:
events = self.get_google_events()
cache.set(cache_name, events, 60 * 10)
关于django - 使用 cache.get_or_set() 缓存 Django 函数调用的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40772832/