django - 使用 cache.get_or_set() 缓存 Django 函数调用的结果

标签 django caching

该条款工作正常:

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/

相关文章:

mysql - hibernate JPA+mysql : can not disable caching in createNativeQuery

asp.net-mvc - 帮助为测试响应 header 创建单元测试,特别是 Cache-Control,以确定缓存是否已禁用

python - 如何在mongoDB中存储图像?

iphone - 使用 REST api 后端开发 iOS 应用程序(基于数据库)

django - uWSGI失败,出现ModuleNotFoundError

python - 使用模板自定义 Django FormWizard 步骤

caching - 如何清除 CPU L1 和 L2 缓存

django - 使用django-storages和boto3在Django中调用CreateMultipartUpload操作时访问AccessDenied

caching - 如何在ASP.NET MVC Web应用程序中使用缓存?

c++ - 在彼此非常接近的范围内混合二进制数据和指令是否有缓存惩罚?