mon*_*kut 23 python django caching
我有一个非常简单的网站,我正在使用page_cache装饰器.我有一个cronjob,它检查新数据并在可用时处理它.(这是使用crontab执行的管理命令运行的)
我想在处理新数据时清除所有页面缓存.
我正在看这里的文档:https: //docs.djangoproject.com/en/dev/topics/cache/?from = olddocs?from = olddocs
并发现cache.clear(),这似乎是我想要的.我在数据处理部分添加了一个标志,并cache.clear()在找到新数据时执行.
但是,在命令运行后,不会清除缓存.(我已经清除了缓存的浏览器并检查以确定它不是浏览器)
难道cache.clear()不工作,清除所有缓存的页面?
我正在使用DatabaseCache,所以我想我可以手动清除缓存表,但是有更好的方法吗?
Col*_*nsz 23
我有一个SQLite数据库缓存的问题 - 该clear()方法不清除缓存,尽管它与MySQL数据库缓存一起工作正常.似乎SQLite缓存需要django.db.transation.commit_unless_managed()在DELETE from [table]语句运行后进行调用.
我一直在使用多个缓存,因为在将核心作为1.3的一部分添加到核心之前,所以有一个包装器围绕几个缓存调用 - 包括clear()- 所以我能够覆盖这个方法并包括commit_unless_managed().我想我应该把它记录为bug.
下面是我使用刷新一个内存缓存缓存(在默认缓存代码的大纲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')
Run Code Online (Sandbox Code Playgroud)
而不是懒惰和硬编码它我的方式应该很容易从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)
Run Code Online (Sandbox Code Playgroud)
这只是确保事务得到落实。
| 归档时间: |
|
| 查看次数: |
53171 次 |
| 最近记录: |