【问题标题】:Django Cache (Redis) auto refresh when data is changedDjango Cache(Redis)在数据更改时自动刷新
【发布时间】:2017-01-09 19:08:09
【问题描述】:

如果对与缓存数据相关的数据库进行了任何更改,是否有任何方法通知 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)

【问题讨论】:

  • 我遇到了类似的问题,但情况略有不同。在我的缓存中,我将某些 API 的结果缓存到其他应用程序。所以,想知道是否有办法通过再次调用 API 来刷新后台缓存,而不是在更新 API 调用时清除缓存并在获取时再次加载。
  • 如果我理解问题正确github.com/Suor/django-cacheops 解决了这个问题。

标签: python django postgresql caching redis


【解决方案1】:

一年后,这就是我的想法

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

这两个帖子帮助提出了接收器功能,它将清除 redis 键的缓存。

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

以下是我认为有帮助的帖子: Blog

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2017-08-31
    • 2017-10-22
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 2020-02-08
    相关资源
    最近更新 更多