当使用Django的page_cache装饰器时,如何清除整个缓存

|| 我有一个非常简单的网站,我在其中使用
page_cache
装饰器。 我有一个cronjob,用于检查新数据并对其进行处理(如果有)。 (这是使用通过crontab执行的管理命令运行的) 然后,我想在处理新数据时清除所有页面缓存。 我在这里查看文档: https://docs.djangoproject.com/en/stable/topics/cache/ 并发现
cache.clear()
,这似乎是我想要的。 我在数据处理部分添加了一个标志,并在发现新数据时执行
cache.clear()
。 但是,命令运行后不会清除缓存。 (我已经清除了缓存的浏览器,并检查了它是否不是浏览器) ѭ1不能用于清除所有缓存的页面吗? 我正在使用
DatabaseCache
,所以我想我可以手动进入并清除缓存表,但是还有更好的方法吗?     
已邀请:
        我在使用SQLite数据库缓存时遇到了这个问题-although5ѭ方法无法清除缓存,尽管它在MySQL数据库缓存中也能正常工作。似乎在运行
DELETE from [table]
语句之后,SQLite缓存需要调用
django.db.transation.commit_unless_managed()
。 自从正式支持作为1.3的一部分被添加到内核之前,我就一直在使用多个缓存,因此对多个缓存调用(包括
clear()
)进行了包装,因此我能够覆盖此方法并包括
commit_unless_managed()
。我想我应该将其记录为错误。 这是我用来刷新内存缓存((10ѭ中的默认缓存)和存储在
settings.DATABASES[\'cache_database\']
数据库的
cache_table
中的数据库缓存的代码的概述。
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
中获取值。     
        这是一个错误#19896,看起来已在1.6中修复。 如果您使用的是较旧的版本,请执行以下类似的操作,以达到预期的效果。
from django.db import router, transaction


def clear_cache(the_cache):
    the_cache.clear()
    # commit the transaction
    db = router.db_for_write(the_cache.cache_model_class)
    transaction.commit_unless_managed(using=db)
这只是确保事务得到落实。     
        将某些内容放入缓存中,然后尝试从
manage.py shell
控制台调用ѭ1and,然后手动检查数据库缓存内容。如果那行得通,那么发现新数据时也许不会调用您的“ 1”。 了解幕后情况的最简单方法是将
import pdb; pdb.set_trace()
放在
cache.clear()
函数的开头,然后运行调试服务器并等待,然后一些代码调用此func,您将能够逐步执行它的代码,或者您只会看到未按预期调用此函子。     

要回复问题请先登录注册