Django:通过管理面板更改数据时自动使缓存无效?

Mat*_*ews 7 django caching

今天就Django提问.

缓存框架看起来非常棒,我想在整个网站上使用它.我没有为我的视图设置明确的到期时间,而是希望无限期地缓存它们,并且只在内容更改时使缓存无效/删除.梦想的场景吧?

有没有办法挂钩Django的自动管理员,以便在CRUD操作发生时,相关的缓存被删除?我希望我不得不以某种方式告诉管理面板哪个模型应该使哪个类无效,但原则上,这可能吗?我可以添加某种回调吗?任何替代品?

谢谢!马特

Pet*_*ell 6

两部分答案:

  1. 清除CRUD事件的缓存?像馅饼一样简单 - 使用Django信号.

  2. 清除缓存的相关部分?这是一个真正难以解决的问题.从表面上看,它可能看起来很简单,但除了最微不足道的情况之外,除了最简单的情况外,依赖性很难辨别.

我们通过扩展django缓存代码来解决第2部分,将对象类/ id信息嵌入到名称中,然后在子页面级别进行缓存.在CRUD事件中,我们可以通过缓存的项目名称进行简单的正则表达式,并根据需要进行修剪.

总而言之,我认为这是另一个早熟优化的案例,并不是很明显它没有任何区别.下次我会等到有一个经过验证的,可测量的性能问题之后再做这样的事情.