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

标签 python django caching

我有一个非常简单的网站,我正在使用 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/

相关文章:

python - 在模拟中修补生成器

python - 如何在 python 中绘制圆弧(圆的一部分)

javascript - Ajax + Django Like 按钮

python - 仅当另一个模型字段为真时才需要管理站点中的模型字段

google-app-engine - 使用 AppEngine 后端进行缓存的可行性/值(value)?

python - Google App Engine 中的 UnicodeDecodeError

python - 使用 python 3.3 在 Django 1.9 中导入 WeakMethod 错误

django - 在 Django 管理界面中链接以直接从数据库下载模型字段

要使用的 PHP 数量

java - 如何清理tomcat缓存?