gpt4 book ai didi

python - 使用 django 的 page_cache 装饰器时如何清除整个缓存

转载 作者:IT老高 更新时间:2023-10-28 20:27:47 29 4
gpt4 key购买 nike

我有一个非常简单的网站,我正在使用 page_cache 装饰器。我有一个 cronjob 可以检查新数据并在可用时对其进行处理。(这是使用 crontab 执行的管理命令运行的)

我想在处理新数据时清除所有页面缓存。

我在这里查看文档: https://docs.djangoproject.com/en/stable/topics/cache/

找到cache.clear(),这似乎是我想要的。我在数据处理部分添加了一个标志,并在找到新数据时执行 cache.clear()

但是,在命令运行后,缓存不会被清除。(我已经清除了缓存的浏览器,并检查确定不是浏览器)

cache.clear() 不能清除所有缓存页面吗?

我使用的是DatabaseCache,所以我想我可以进去手动清除缓存表,但是有没有更好的方法?

最佳答案

我在使用 SQLite 数据库缓存时遇到过这个问题 - clear() 方法不会清除缓存,尽管它适用于 MySQL 数据库缓存。在运行 DELETE from [table] 语句之后,似乎 SQLite 缓存需要调用 django.db.transation.commit_unless_managed()

自从官方支持作为 1.3 的一部分添加到核心之前,我一直在使用多个缓存,因此对几个缓存调用有一个包装器 - 包括 clear() - 所以我能够覆盖此方法并包含 commit_unless_managed()。我想我可能应该将其记录为错误。

这是我用来刷新内存缓存缓存(django.core.cache 中的默认缓存)和存储在 cache_table 中的数据库缓存的代码大纲> settings.DATABASES['cache_database'] 数据库。

from django.db import connections, transaction
from django.core.cache import cache # This is the memcache cache.

def flush():
# This works as advertised on the memcached cache:
cache.clear()
# This manually purges the SQLite cache:
cursor = connections['cache_database'].cursor()
cursor.execute('DELETE FROM cache_table')
transaction.commit_unless_managed(using='cache_database')

与其像我那样懒惰和硬编码它应该很容易从 settings.CACHESdjango.db.router 获取值。

关于python - 使用 django 的 page_cache 装饰器时如何清除整个缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6159841/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com