我有一个非常简单的网站,我正在使用 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.CACHES
和 django.db.router
获取值。
关于python - 使用 django 的 page_cache 装饰器时如何清除整个缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6159841/