【发布时间】:2012-05-11 07:26:10
【问题描述】:
我知道 Johnny 缓存的 MAN_IN_BLACKLIST 和 JOHNNY_TABLE_BLACKLIST。
有没有办法指定相反的?那就是只指定需要缓存的表?
我想这样做的原因很简单,因为我们在应用程序中有超过 200 个表,我想缓存一些并且不希望我的 MAN_IN_BLACKLIST 非常大。
谢谢,
【问题讨论】:
标签: django django-cache django-johnny-cache
我知道 Johnny 缓存的 MAN_IN_BLACKLIST 和 JOHNNY_TABLE_BLACKLIST。
有没有办法指定相反的?那就是只指定需要缓存的表?
我想这样做的原因很简单,因为我们在应用程序中有超过 200 个表,我想缓存一些并且不希望我的 MAN_IN_BLACKLIST 非常大。
谢谢,
【问题讨论】:
标签: django django-cache django-johnny-cache
恐怕你需要破解johnny/cache.py,而不是显式地写表,主要是包含blacklist_match的行。最简单的方法是直接修改函数blacklist_match:
# set WHITELIST in johnny/settings.py, just as BLACKLIST
WHITELIST = getattr(settings, 'MAN_IN_WHITELIST',
getattr(settings, 'JOHNNY_TABLE_WHITELIST', []))
WHITELIST = set(WHITELIST)
def blacklist_match(*tables):
return not WHITELIST.issuperset(tables) or \
bool(settings.BLACKLIST.intersection(tables))
【讨论】:
QuerySet.raw() 和 db.cursor()。
从 1.4 版开始,Johnny Cache 实际上支持白名单。
将JOHNNY_TABLE_WHITELIST 添加到您的设置中,并将其分配给您要缓存的表列表,例如:
JOHNNY_TABLE_WHITELIST = ['appname_tablename', 'someotherapp_differenttable']
【讨论】: