【问题标题】:Django Johnny cache - include tables instead of exclude using MAN_IN_BLACKLIST?Django Johnny 缓存 - 使用 MAN_IN_BLACKLIST 包含表而不是排除?
【发布时间】:2012-05-11 07:26:10
【问题描述】:

我知道 Johnny 缓存的 MAN_IN_BLACKLISTJOHNNY_TABLE_BLACKLIST。 有没有办法指定相反的?那就是只指定需要缓存的表? 我想这样做的原因很简单,因为我们在应用程序中有超过 200 个表,我想缓存一些并且不希望我的 MAN_IN_BLACKLIST 非常大。

谢谢,

【问题讨论】:

    标签: django django-cache django-johnny-cache


    【解决方案1】:

    恐怕你需要破解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))
    

    【讨论】:

    • 好的,谢谢。我还看到,如果我使用 django db 连接/光标触发原始选择查询,它似乎不会缓存结果。这是设计使然吗?或者是否也可以缓存这些结果?
    • @ksrini 是的,Johnny monkey-patches sqlcompiler for normal Query,不要包装 QuerySet.raw()db.cursor()
    【解决方案2】:

    从 1.4 版开始,Johnny Cache 实际上支持白名单。 将JOHNNY_TABLE_WHITELIST 添加到您的设置中,并将其分配给您要缓存的表列表,例如:

    JOHNNY_TABLE_WHITELIST = ['appname_tablename', 'someotherapp_differenttable']
    

    source

    【讨论】:

      猜你喜欢
      • 2020-05-25
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 2014-11-02
      • 2014-07-25
      • 2011-11-15
      • 2013-02-22
      • 2013-08-03
      相关资源
      最近更新 更多