Django Cache (Redis) 在数据更改时自动刷新

kt1*_*t14 7 python django postgresql caching redis

如果对与缓存数据相关的数据库进行了任何更改,是否有任何方法可以通知 django 刷新缓存?我找到了这篇文章,没有最新的答案,提到的 django 版本是 1.6。我查看了缓存文档,但没有找到与问题直接相关的任何内容。

我的问题是如果我缓存数据库查询的结果并且在缓存超时之间添加了新记录怎么办

from django.core.cache import cache

results = MyModel.objects.all() # 4 count
cache.set('results', results ) # Cached for 5 mins

# Mean while records have been added to MyModel table

results = MyModel.objects.all() # 6 count
cache.get('results') # 4 count and would not be updated for 5 mins
Run Code Online (Sandbox Code Playgroud)

有没有办法检查是否有任何添加到数据库和缓存刷新,无论何时从数据库中添加或删除记录?

我有将近 10 张表,这可能很重要。无论何时更改记录,都必须更新缓存。

非常感谢任何帮助或建议。

项目堆栈:

Django: 1.9
Python: 3.5
Redis: 2.8 (Cache Database)
Postgres: 9.5 (Main Database)
Run Code Online (Sandbox Code Playgroud)

kt1*_*t14 6

所以一年后,这就是我想出的

我们可以在 app.py 中为每个要更新缓存的应用程序的模型注册自定义 post_save 寄存器,或者在项目初始化时为所有模型添加 post_save 侦听器。

这两篇文章有助于提出接收器功能,该功能将清除 redis 键的缓存。

在我的应用程序中,我使用 "{}-{}-{}".format(slug, model_name, username) 作为我的 redis 键的键,每次更改该用户的模型数据时我都会删除此键。

以下是我觉得有帮助的帖子: 博客