为每个参数值设置独立LRU缓存?Python2实现方案咨询
为每个列名实现独立LRU缓存的Python2方案
由于Python2标准库没有内置lru_cache,首先需要安装兼容的backport包:
pip install functools32
核心思路是为每个col_name单独创建一个带LRU缓存的函数,用字典维护这些函数的映射,确保不同列的缓存互相独立。实现代码如下:
from functools32 import lru_cache class YourDBHandler(object): def __init__(self): # 存储列名到对应缓存函数的映射 self._column_caches = {} def _fetch_column_data(self, col_name, time): # 这里编写实际从SQL数据库获取列数据的逻辑 # 示例: # cursor.execute("SELECT {} FROM table WHERE time = %s".format(col_name), (time,)) # return cursor.fetchall() pass def get_col(self, col_name, time): # 检查当前列是否已有对应的缓存函数 if col_name not in self._column_caches: # 为该列创建绑定了列名的缓存函数,缓存仅针对time参数 @lru_cache(maxsize=128) # 根据需求调整maxsize的值 def cached_time_query(t): return self._fetch_column_data(col_name, t) self._column_caches[col_name] = cached_time_query # 调用对应列的缓存函数获取数据 return self._column_caches[col_name](time)
说明
_column_caches字典负责存储每个列名对应的缓存函数,确保不同列的缓存空间完全独立,避免调用频率不均导致的缓存失效问题。_fetch_column_data抽离了原有的数据库查询逻辑,让缓存函数可以专注于绑定列名并缓存时间参数的查询结果。- 每次调用
get_col时,若该列还未创建缓存函数,则动态生成并存储,后续同列名的调用直接复用已有缓存。
内容的提问来源于stack exchange,提问作者roulette01
相关产品推荐
相关产品推荐

