卡飞资源网

专业编程技术资源共享平台

redis的缓存策略以及区别

一、核心策略对比表

策略名称

淘汰逻辑

优点

缺点

适用场景

LRU

淘汰最久未访问的数据

实现简单,适应热点数据

可能误删近期访问但低频数据

常规业务(默认推荐)

LFU

淘汰访问频率最低的数据(时间 + 次数)

精准区分冷热数据

实现复杂,内存占用略高

数据访问频率差异大的场景

FIFO

淘汰最早写入的数据

实现简单,保证时效性

无法应对突发访问

日志、短期会话等时效性要求高

随机淘汰

随机删除数据

无计算开销

命中率不稳定

测试环境或数据分布均匀场景

仅淘汰过期键

仅处理已过期数据

避免误删关键数据

需依赖合


二、策略细节解析

1.LRU(Least Recently Used)



  • 实现:Redis 使用 近似 LRU(随机采样 + 淘汰),通过配置 maxmemory-samples 控制采样数量(默认 5)。
  • 示例:用户行为记录、商品详情页缓存。
  • 优化:结合 volatile-ttl 优先淘汰即将过期的键。

2.LFU(Least Frequently Used)

  • 实现:维护访问次数(计数器)和时间衰减,Redis 2.8+ 支持。
  • 参数:lfu-log-factor:控制频率计数的衰减速度(默认 10)。lfu-decay-time:时间衰减单位(分钟,默认 1)。
  • 适用:用户高频访问但偶尔冷启动的场景(如电商热门商品)。

3.FIFO

  • 替代方案:使用 List 结构存储数据,手动维护顺序。通过脚本定期删除最旧的键。
  • 局限:无法利用 Redis 原生淘汰机制,需额外开发。

4.仅淘汰过期键

  • 子策略:volatile-ttl:优先淘汰剩余存活时间最短的键。volatile-lru/volatile-lfu:在过期键中应用 LRU/LFU。
  • 建议:对需要长期保留的键不设置过期时间,避免被淘汰。

三、选择策略的 3 个维度

  1. 数据特征:冷热分明 → LRU/LFU。时效性强 → FIFO 或 volatile-ttl。均匀分布 → 随机淘汰。
  2. 业务优先级:不允许丢失 → 仅淘汰过期键 + 持久化。可接受部分丢失 → LRU/LFU。
  3. 性能成本:LFU 比 LRU 内存占用高约 10%,但命中率更优。避免频繁触发淘汰(如设置 maxmemory-policy noeviction 强制报错)。

四、监控与调优

  • 关键指标
  • bash
redis-cli info stats | grep evicted_keys  # 查看淘汰次数
redis-cli info memory | grep maxmemory   # 内存使用情况调优示例:

conf

maxmemory 1gb
maxmemory-policy allkeys-lfu
maxmemory-samples 10  # 提高 LRU 精准度
lfu-log-factor 5      # 加快低频数据淘汰

五、总结建议

  1. 首选 LFU:若业务数据访问频率差异明显,优先使用 allkeys-lfu。
  2. 结合过期时间:对短期数据设置合理 TTL,降低淘汰压力。
  3. 监控 + 实验:通过 redis-cli monitor 观察淘汰行为,调整策略参数。

如需保留特定数据,可使用 BITFIELD 或设置无过期时间(EXPIRE key -1)。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言