Python 缓存策略:从 dict 到 LRU 与分布式实战
性能优化里,缓存通常比'再把算法抠快一点'更直接。Python 的动态特性让开发很顺手,但也带来额外开销;如果不想每次都把代价付在数据库、远程调用或重复计算上,缓存几乎是绕不过去的手段。
1. 缓存先从最朴素的东西说起
缓存的核心就是空间换时间。在 Python 里,最容易落地的缓存就是 dict。它基于哈希表,平均查找复杂度接近 O(1),做短期结果复用已经够用了。
# 一个最简单的缓存示例_cache = {}
def get_data_from_db(key):
# 模拟耗时操作
if key not in _cache:
# 假设这里是从数据库读取数据
_cache[key] = f"Value for {key}"
return _cache[key]
这类写法的问题也很直白:代码散、失控快、过期策略不好补。只要缓存开始参与真实业务,手写字典通常就会变得难维护。
2. 用装饰器把缓存逻辑收起来
更常见的做法,是把缓存包装成装饰器,让业务函数不用关心存取细节。下面这个例子里,CacheManager 负责存储,memoize 负责拦截调用并复用结果。
import time
from functools import wraps
class CacheManager:
"""简单的缓存管理类,体现封装思想"""
def __init__(self):
self._storage = {}
def get(self, key):
return self._storage.get(key)
def set(self, key, value):
self._storage[key] = value
def memoize(manager):
"""缓存装饰器"""
def decorator():
():
key =
result = manager.get(key)
result :
result = func(*args, **kwargs)
manager.(key, result)
result
wrapper
decorator
cache_inst = CacheManager()
():
time.sleep()
n **


