在 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'"