2024-05-12 21:54:45 发布
网友
我大约有以下格式的6,00,000 entries in MongoDB:
6,00,000 entries in MongoDB
feature:category:count
其中
我想缓存前1000个元组,这样就不会每次都查询数据库了。
如何在Python中构建LRU缓存?或者有什么已知的解决办法?
Python 3.2functools包含一个LRU cache。您可以很容易地从repo中选择它,检查是否必须调整它以使用Python 2(不应该太难-可能使用itertools而不是某些内置项-询问是否需要帮助)并完成。但是,您需要将查询包装成一个可调用的,并确保它依赖于(hashable)函数参数。
functools
itertools
Python3.3中的LRU cache有O(1)插入、删除和搜索。
该设计使用一个循环的双链接条目列表(从最早到最新排列)和一个哈希表来定位各个链接。缓存命中使用哈希表查找相关链接并将其移动到列表的头部。缓存未命中删除最旧的链接并在链接列表的开头创建新链接。
这是一个简化(但很快)的版本,由33行非常基本的Python组成(只使用简单的字典和列表操作)。它运行在Python2.0及更高版本(或PyPy或Jython或Python3.x)上:
class LRU_Cache: def __init__(self, original_function, maxsize=1024): # Link structure: [PREV, NEXT, KEY, VALUE] self.root = [None, None, None, None] self.root[0] = self.root[1] = self.root self.original_function = original_function self.maxsize = maxsize self.mapping = {} def __call__(self, *key): mapping = self.mapping root = self.root link = mapping.get(key) if link is not None: link_prev, link_next, link_key, value = link link_prev[1] = link_next link_next[0] = link_prev last = root[0] last[1] = root[0] = link link[0] = last link[1] = root return value value = self.original_function(*key) if len(mapping) >= self.maxsize: oldest = root[1] next_oldest = oldest[1] root[1] = next_oldest next_oldest[0] = root del mapping[oldest[2]] last = root[0] last[1] = root[0] = mapping[key] = [last, root, key, value] return value if __name__ == '__main__': p = LRU_Cache(ord, maxsize=3) for c in 'abcdecaeaa': print(c, p(c))
除了Python 3.2中包含的版本之外,Python核心开发人员Raymond Hettinger的Python Cookbook中还包含了LRU缓存配方。
Python 3.2
functools
包含一个LRU cache。您可以很容易地从repo中选择它,检查是否必须调整它以使用Python 2(不应该太难-可能使用itertools
而不是某些内置项-询问是否需要帮助)并完成。但是,您需要将查询包装成一个可调用的,并确保它依赖于(hashable)函数参数。Python3.3中的LRU cache有O(1)插入、删除和搜索。
该设计使用一个循环的双链接条目列表(从最早到最新排列)和一个哈希表来定位各个链接。缓存命中使用哈希表查找相关链接并将其移动到列表的头部。缓存未命中删除最旧的链接并在链接列表的开头创建新链接。
这是一个简化(但很快)的版本,由33行非常基本的Python组成(只使用简单的字典和列表操作)。它运行在Python2.0及更高版本(或PyPy或Jython或Python3.x)上:
除了Python 3.2中包含的版本之外,Python核心开发人员Raymond Hettinger的Python Cookbook中还包含了LRU缓存配方。
相关问题 更多 >
编程相关推荐