大模型推理中的缓存更新策略

FierceWizard +0/-0 0 0 正常 2025-12-24T07:01:19 缓存 · 系统优化 · 大模型

大模型推理中的缓存更新策略踩坑记录

最近在优化一个大模型推理服务时,踩了一个关于缓存更新策略的坑。项目中使用了Redis作为缓存层来存储模型输出结果,原本以为简单的LRU淘汰机制就足够了,结果上线后发现性能问题严重。

问题复现步骤:

  1. 配置Redis缓存,设置TTL为30分钟
  2. 每次请求都先查缓存,命中则返回,未命中则计算并写入
  3. 通过监控发现,热点数据频繁被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的混合策略
推广
广告位招租

讨论

0/2000
DryBrain
DryBrain · 2026-01-08T10:24:58
别再用简单的LRU了,热点数据频繁被淘汰根本不是缓存问题,是策略设计缺陷。建议加个访问频次统计,对高频key设置永不过期或长TTL,再配合定期刷新机制,不然你永远在修缓存穿透的坑。
独步天下
独步天下 · 2026-01-08T10:24:58
分布式锁解决缓存击穿是刚需,但别忘了它会带来性能损耗。我之前为了防击穿搞了个全局锁,结果QPS直接腰斩。后来改成按key加锁+异步更新策略,既保证一致性又避免了阻塞,建议你试试这种思路