我正在使用python库diskcache
及其装饰程序@cache.memoize
来缓存对我的couchdb数据库的调用。很好。但是,我想向用户打印数据是从数据库还是从缓存返回的
我甚至不知道如何解决这个问题
到目前为止,我的代码是:
import couchdb
from diskcache import Cache
cache = Cache("couch_cache")
@cache.memoize()
def fetch_doc(url: str, database: str, doc_id: str) -> dict:
server = couchdb.Server(url=url)
db = server[database]
return dict(db[doc_id])
这里有一种方法,但我并不推荐它,因为(1)它添加了一个额外的操作,可以自己手动检查缓存,(2)它可能重复库内部已经在做的事情。我没有对任何性能影响进行适当的检查,因为我没有一个具有各种
doc_id
的生产数据/env,但正如martineau's comment所说,它可能会因为额外的查找操作而减慢速度但它来了
{a2}对象“支持熟悉的Python映射接口”(如} -d函数的参数自动生成的相同密钥,手动检查缓存中是否已经存在给定的密钥:
dict
s)。然后,您可以使用基于^{因此,您可以将
fetch_doc
函数包装到另一个函数中,该函数检查基于url
、database
和doc_id
参数的缓存键是否存在,并在调用实际的fetch_doc
函数之前将结果打印给用户:在测试时,请使用:
它输出:
您可以将该包装器函数转换为装饰器:
或者as suggested in the comments,将其合并为一个新的装饰器:
一些快速测试:
(如果在调用时
doc_id
是随机变化的,可能会更好。)同样,正如我在开始时提到的,缓存和
memoize
调用函数应该可以加速该函数。这个答案添加了缓存查找和打印/记录的附加操作,无论您是从DB还是从缓存中获取,它都会影响该函数调用的性能。适当地测试相关问题 更多 >
编程相关推荐