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

标签 python django postgresql caching redis

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

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

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)

最佳答案

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

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

这两篇文章帮助提出了接收器函数,该函数将清除 redis key 的缓存。

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

以下是我觉得有用的帖子: Blog

关于python - 数据更改时 Django 缓存 (Redis) 自动刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39279310/

相关文章:

python - 在python中以 super 用户身份打开文件

postgresql - 为什么 pg_dump 忽略 .pgpass?

python - 在 Django 中使用数据库按日期排序

sql - 使用postgresql的多选查询

postgresql - 无法构建 pg gem

python - list.append(variable) 不 append 但替换列表

python - 在 Mac OS X 中运行没有终端或停靠项的 python 脚本和编译的 c 代码

python - pygame,如何在调整窗口大小时更新窗口大小

mysql - python manage.py runserver _mysql_exceptions.OperationalError : (2002, "Can' t 通过socket '/tmp/mysql.sock'连接本地MySQL服务器(2)"

python - Django OneToOneField 允许在线引用