在电商系统中,缓存是提升性能、减轻数据库压力的核心手段,但缓存空间有限,需通过淘汰策略移除 “不常用” 数据。不同业务场景对数据访问频率、时效性、重要性的要求差异极大,选择合适的淘汰策略能显著提升缓存命中率。以下从电商核心业务场景出发,分析如何匹配对应的缓存淘汰策略。
一、先明确缓存淘汰策略的核心类型及适用场景
常见的缓存淘汰策略(以 Redis 为例)可分为通用型和业务定制型,核心差异在于 “淘汰依据”:
策略类型 核心逻辑 优势 劣势 通用场景
LRU(最近最少使用) 淘汰最近最少被访问的数据 贴合 “热点数据优先保留” 的直觉 无法识别 “周期性访问数据”(如促销活动数据) 用户行为数据、商品详情页
LFU(最不经常使用) 淘汰一段时间内访问次数最少的数据 适合长期统计访问频率,保留高频数据 对 “突发高频数据” 不友好(如新品首发) 长尾商品、历史订单查询
TTL(过期时间优先) 按预设过期时间淘汰,先过期先淘汰 精准控制数据时效性,避免脏数据 需手动设置过期时间,过期前可能占用空间 限时促销、优惠券、库存计数
FIFO(先进先出) 按数据进入缓存的顺序淘汰最早数据 实现简单,无额外统计开销 无法区分数据重要性,命中率低 临时缓存(如临时会话数据)
业务定制策略 结合业务权重(如销量、价格)淘汰 精准匹配业务优先级 实现复杂,需额外开发 首页推荐、高价值商品缓存
二、电商核心业务场景与缓存淘汰策略的匹配
1. 商品详情页缓存 —— 优先选 LRU
业务特点:
商品详情页是高频访问场景,用户会随机浏览不同商品,但近期访问的商品(如用户刚加入购物车、收藏的商品)被再次访问的概率极高。
策略选择逻辑:
多数用户的行为是 “最近浏览→可能再次浏览”,LRU 能保留 “最近被点击” 的商品数据,符合用户行为习惯。
例外:对于长期热销的爆款商品(如常年销量 TOP10 的商品),可手动设置 “永不淘汰”(结合 LRU 的 “保护机制”),避免因短期未访问被误删。
示例:用户浏览过的 “连衣裙 A”“运动鞋 B”,LRU 会优先保留这两个商品的详情缓存,而非 3 天前浏览的 “衬衫 C”。
2. 限时促销 / 优惠券缓存 —— 必须用 TTL
业务特点:
促销活动(如 618 限时折扣)、优惠券有明确的时间窗口,过期后数据失效(如价格恢复、优惠券不可用),需严格控制缓存时效性。
策略选择逻辑:
TTL 可通过预设过期时间(如活动结束后 5 分钟)自动淘汰数据,避免用户看到 “过期优惠”,减少业务纠纷。
优化:对 “即将过期的高频访问数据”(如活动最后 1 小时的商品),可延长 TTL 10 分钟,避免缓存突然失效导致数据库压力骤增。
示例:“满 100 减 30” 优惠券有效期至 23:59,TTL 设置为 23:59+5 分钟,确保过期后缓存自动清理,用户无法再看到该优惠券。
3. 首页推荐 / 热门商品缓存 —— 推荐 LFU + 业务权重
业务特点:
首页推荐的商品需满足 “高热度、高转化”,但热度可能随时间变化(如新品逐渐成为爆款),且高价值商品(如奢侈品)即使访问量略低,也需优先保留。
策略选择逻辑:
基础用 LFU:统计一定周期(如 24 小时)内的访问次数,保留 “被点击 / 加购次数多” 的商品,淘汰 “极少被关注” 的长尾商品。
叠加业务权重:对 “高客单价商品”“新品(需扶持曝光)” 手动提升权重,避免被 LFU 误淘汰(例如:给客单价>1000 元的商品增加 “虚拟访问次数”)。
示例:LFU 统计中,“平价 T 恤” 访问量高但客单价低,“高端手表” 访问量略低但客单价高,通过权重调整,“高端手表” 优先保留。
4. 库存计数 / 秒杀场景缓存 ——TTL + 主动淘汰结合
业务特点:
库存数据(如秒杀商品剩余数量)需强实时性,一旦库存为 0,需立即从缓存中移除,避免用户看到 “虚假库存”。
策略选择逻辑:
基础用 TTL:设置短过期时间(如 10 秒),确保库存数据及时更新(避免缓存与数据库长期不一致)。
关键操作:当库存售罄时,主动删除缓存(而非等待 TTL 过期),结合 “缓存空值”(如设置库存 = 0 并缓存 5 分钟),防止缓存穿透。
示例:秒杀商品 “库存仅剩 10 件”,TTL 设为 10 秒;当库存售罄后,立即删除缓存并写入 “库存 = 0” 的空值,避免用户继续下单。
5. 用户会话 / 购物车缓存 ——LRU+FIFO 混合
业务特点:
用户会话(如登录状态)、购物车数据与 “当前活跃用户” 强相关,长期未登录用户的数据可清理,活跃用户的近期操作需保留。
策略选择逻辑:
对活跃用户(如 1 小时内有操作):用 LRU 保留 “最近添加的商品”“最近浏览的会话信息”。
对非活跃用户(如 30 天未登录):用 FIFO 淘汰最早进入缓存的会话数据(无需统计访问频率,降低开销)。
示例:用户 A3 天前登录过,购物车数据按 FIFO 淘汰;用户 B10 分钟前刚添加商品,购物车数据按 LRU 保留。
三、进阶:混合策略与优化技巧
多级缓存分层:
本地缓存(如 Caffeine)用 LRU(高频访问的热点数据,减少网络开销);
分布式缓存(如 Redis)用 TTL + 业务权重(全局数据,控制时效性)。
避免 “缓存雪崩”:
对同类数据(如商品详情)设置随机 TTL 偏移量(如基础 1 小时 ±10 分钟),避免同时过期。
监控与动态调整:
通过缓存命中率(目标≥90%)、业务指标(如促销期间的下单成功率)监控策略效果,定期调整(如大促前临时切换为 “优先保留热销品”)。
总之,电商系统选择缓存淘汰策略的核心原则是:“让缓存优先保留‘对业务最有价值’的数据”。高频实时场景(如库存、促销)依赖 TTL 保证时效性;用户行为驱动的场景(如商品详情、购物车)适合 LRU/LFU;高价值或定制化场景(如首页推荐)需叠加业务权重。最终需结合监控数据动态优化,平衡性能与业务需求。
|
||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||
|