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

8
有没有办法通知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

是否有办法检查数据库是否有任何增加,以及当数据库中的记录添加或删除时刷新缓存?

我有近10个表可能很重要。每当记录更改时,都必须更新缓存。

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

项目堆栈:

Django: 1.9
Python: 3.5
Redis: 2.8 (Cache Database)
Postgres: 9.5 (Main Database)

我遇到了类似的问题,但情况略有不同。在我的缓存中,我正在缓存某些API对其他应用程序的结果。因此,想知道是否有一种方法可以通过再次调用API来在后台刷新缓存,而不是在更新API调用时清除缓存并在获取时重新加载它。 - Niraj Chapla
如果我理解问题正确的话,https://github.com/Suor/django-cacheops 可以解决这个问题。 - Florian
1个回答

8

经过一年的时间,我想到的解决方法如下:

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

这两篇帖子帮助我编写了一个接收器函数,该函数将清除Redis键的缓存。

在我的应用程序中,我使用“{}-{}-{}”格式(slug、model_name、username)作为我的Redis键的键,并且每次更改该用户的模型数据时都会删除此键。

以下是我发现有帮助的帖子: 博客


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接