大模型推理中的缓存更新策略踩坑记录
最近在优化一个大模型推理服务时,踩了一个关于缓存更新策略的坑。项目中使用了Redis作为缓存层来存储模型输出结果,原本以为简单的LRU淘汰机制就足够了,结果上线后发现性能问题严重。
问题复现步骤:
- 配置Redis缓存,设置TTL为30分钟
- 每次请求都先查缓存,命中则返回,未命中则计算并写入
- 通过监控发现,热点数据频繁被LRU淘汰,导致大量缓存穿透
实际解决方案:
import redis
import json
from datetime import timedelta
class SmartCache:
def __init__(self, redis_client):
self.redis = redis_client
def get_or_compute(self, key, compute_func, ttl=1800):
# 先尝试获取缓存
cached = self.redis.get(key)
if cached:
return json.loads(cached)
# 计算结果
result = compute_func()
# 使用分布式锁避免缓存击穿
lock_key = f"lock:{key}"
if self.redis.set(lock_key, "locked", nx=True, ex=10):
try:
self.redis.setex(key, ttl, json.dumps(result))
return result
finally:
self.redis.delete(lock_key)
# 等待其他进程计算完成
import time
time.sleep(0.1)
return self.get_or_compute(key, compute_func, ttl)
经验总结:
- 缓存更新策略需要考虑热点数据保护
- 避免缓存击穿,使用分布式锁机制
- 建议结合LRU+TTL的混合策略

讨论