Redis缓存更新策略是什么

兄弟帮我问下,Redis缓存更新策略是什么
最新回答
乱世浮尘

2026-04-17 21:54:41

Redis的缓存更新策略主要分为内存溢出淘汰策略、过期策略以及应用方主动更新策略。

内存溢出淘汰策略:当Redis内存使用达到上限(maxmemory)时,会触发淘汰机制,具体策略由maxmemory-policy参数控制,支持6种模式:

  • noeviction:默认策略,拒绝写入操作,仅响应读请求。
  • volatile-lru:基于LRU算法淘汰设置了过期时间的键,若无可淘汰键则回退至noeviction。
  • volatile-random:随机淘汰过期键。
  • allkeys-lru:基于LRU算法淘汰所有键(无论是否设置过期时间)。
  • allkeys-random:随机淘汰所有键(不推荐,可能导致重要数据丢失)。
  • volatile-ttl:优先淘汰剩余生存时间(TTL)最短的键,若无可淘汰键则回退至noeviction。

LRU算法通过维护键的最近访问时间戳,淘汰最久未使用的数据。动态配置可通过config set maxmemory-policy {policy}实现,但需注意主从架构中删除操作同步可能引发写放大问题。

过期策略:采用惰性删除+定期删除的混合模式:

  • 惰性删除:客户端访问键时检查是否过期,若过期则删除并返回空。此策略节省CPU资源,但可能因长期未访问导致内存泄漏。
  • 定期删除:Redis默认每秒运行10次(通过hz参数配置)自适应扫描任务,每次随机抽取20个键删除过期项。若过期比例超过25%,则重复扫描。为避免阻塞服务,设置25毫秒超时限制,超时后切换至快速模式(1毫秒超时且2秒内仅运行1次)。

应用方主动更新策略:

  • Cache Aside模式:应用先查缓存,未命中则从数据库加载并写入缓存。
  • 先删缓存再更新数据库:存在并发读导致脏数据问题(删除缓存后,读请求可能加载旧数据回缓存)。
  • 先更新数据库再删缓存(推荐):避免并发写导致脏数据,但需处理删除缓存失败的情况(可通过重试或消息队列保证最终一致性)。直接更新缓存而非删除可能导致两个并发写操作产生脏数据,因此删除缓存更安全。