如何在模板错误时跳过Flask缓存

时间:2019-03-12 10:59:32

标签: python flask redis

我在Redis服务器上使用带有模板缓存的Flask:

TIMEOUT = 60 * 60
cache = Cache(app.server, config={
    'CACHE_TYPE': 'redis',
    'CACHE_REDIS_HOST': "myredis",
    'CACHE_DEFAULT_TIMEOUT': TIMEOUT,
    'CACHE_REDIS_PORT': 6379,
})
# to disable caching
#app.config["CACHE_TYPE"] = "null"

然后使用@cache装饰器之类的

@cache.memoize(timeout=TIMEOUT)
def update_date():
    return manager.getData()

问题在于,当manager.getData()有错误或没有数据时,装饰器将始终缓存响应。如何避免呢?

[更新]

我尝试使用unless参数,根据文档,它应该是

unless – Default None. Cache will always execute the caching facilities unelss this callable is true. This will bypass the caching entirely.

如此使用

@cache.memoize(timeout=TIMEOUT unless=DataLoader.instance.hasData)
    def update_date():
        return manager.getData()

其中DataLoader是一个Singleton实例,如果没有数据,hasData方法将返回None,如果有数据则返回True,因此方法getData将计算数据并返回实例变量self.data,该变量始终保存最后计算的数据或None

class DataLoader(SingletonMixin):

    def __init__(self):
        self.data=None
    def hasData(self):
        if self.data is Not None:
            return True
        else:
            return None
    def getData(self):
        # calculate data
        res = self.computeData()
        if res is not None:
            self.data=res
        return self.data

但似乎无法按预期工作。

0 个答案:

没有答案