在 Django 中将 cache.clear() 添加到全局保存

Posted

技术标签:

【中文标题】在 Django 中将 cache.clear() 添加到全局保存【英文标题】:Adding cache.clear() to global save in Django 【发布时间】:2016-10-21 08:20:00 【问题描述】:

希望有人知道这样做的简单方法。

是否可以在每次保存到任何模型时运行 cache.clear() 函数?

我知道 Django 文档向您展示了如何实现每个模型,开销不是问题。我想在每次进行更改时清除缓存。

【问题讨论】:

【参考方案1】:

有几种方法可以做到这一点。

首先,您可以创建一个通用的抽象基类,它继承自 models.Model 并覆盖 save 以清除缓存,然后让您的所有模型都继承自该类。

另一种方法可能是使用signals - 保存前和保存后信号将sender 作为可选参数,如果您不指定特定模型,它将为所有模型触发。

【讨论】:

from django.db.models.signals import post_save from django.core.cache import cache @receiver(post_save) def clear_the_cache(**kwargs): cache.clear()【参考方案2】:

@丹尼尔·罗斯曼。抱歉,我的名声不高,无法删除我的评论。

感谢您为我指明正确的方向。

很简单:

from django.db.models.signals import post_save
from django.core.cache import cache

@receiver(post_save)
def clear_the_cache(**kwargs):
    cache.clear()

【讨论】:

嗨,安迪,我正在考虑将其应用于 django oscar 网站。我想知道你的效果如何?有没有你能想到的负面影响?

以上是关于在 Django 中将 cache.clear() 添加到全局保存的主要内容,如果未能解决你的问题,请参考以下文章

如何清除 Rails 动作缓存? (Rails.cache.clear 不起作用)

运行composer install时出错执行\"'cache:clear --no-warmup'\"命令时出错:

[symonfy] An error occurred when executing the "'cache:clear --no-warmup'"

如何清除 APCu 中的用户缓存?

ThinkPHP5 清除runtime缓存文件

在 Django 中将 QuerySet 转换为 JSON