首页 > 解决方案 > 使用 functools lru_cache,如何确定函数是否返回了缓存数据?

问题描述

我有一个简单的实现,使用包装器 lru_cache 围绕从远程数据库获取数据的函数。我希望能够判断结果是否可能是“陈旧的”(即,它是从缓存中获取的还是从数据库中获取的)。我怎么能弄清楚呢?

代码很简单,只需:

@lru_cache(maxsize=2048)
def fetch_cached_data(query, *args, **kwargs):
    return fetch_data(query, *args, **kwargs)

标签: pythonlru

解决方案


仅在单线程程序中有效的糟糕解决方案可能是监视cache_info函数以查看统计信息是否正在更改:

hits = f.cache_info().hits
result = f(some_arg)
if f.cache_info().hits > hits:
    # this result was retrieved from cache
    ...

更好的解决方案可能是更多地考虑您认为过时的内容...所有值最终都来自数据库...是什么让您在过去的函数调用中查询过时...自上次查询以来的时间,返回的行上的版本标记等


推荐阅读