查看更多当前 - 案例分析 - Web开发
简单
案例题
2025年11月第2题
#了解即可
#超纲

某大型电商平台在“双十二”大促期间,访问量激增,订单与商品查询请求达到平时的数十倍。系统架构采用“应用服务器 + Redis 缓存 + MySQL 数据库”的典型三层结构。促销高峰期间,监控发现数据库 CPU 使用率长期超过 95%,查询响应时间显著上升,部分请求超时,严重影响用户下单体验。经排查发现主要存在以下问题:

  1. 热点商品数据访问频繁,缓存命中率下降;
  2. 大量恶意或异常请求持续查询数据库中不存在的商品 ID,导致缓存中无法命中,每次请求都直接访问数据库,形成缓存穿透问题;
  3. 在缓存失效瞬间,高并发请求直接打到数据库,引发数据库压力骤增,出现类似“击穿”现象。

针对上述问题,架构团队提出以下优化方案:
采用 Redis 集群 实现高可用,结合主从复制与哨兵模式;使用 布隆过滤器(Bloom Filter)对商品 ID 做合法性校验,防止无效请求穿透缓存;在缓存与数据库同步策略上,采用 Write-Through(写穿透)模式保证主从数据一致性。

分值(9分

对比 Memcached,说明 Redis 在该场景下具备的两个主要优势。结合本案例,解释为什么布隆过滤器可以有效解决缓存穿透(或击穿)问题。

参考答案

相较于 Memcached,Redis 在该电商高并发促销场景下的两个主要优势是:1. 支持丰富的数据结构,适合复杂业务场景;2. 支持持久化、主从复制与高可用机制,系统可靠性更高
布隆过滤器通过在缓存之前拦截不存在的商品 ID 请求,避免无效请求访问数据库,从而有效解决缓存穿透问题,间接防止击穿现象的发生。

凯恩解析

在本案例中,Redis 相比 Memcached 更适合作为核心缓存组件,主要体现在以下两个方面。
首先,Redis 支持丰富的数据结构。Redis 不仅支持简单的 Key-Value 字符串类型,还支持 Hash、List、Set、ZSet、Bitmap、HyperLogLog 等多种数据结构。在电商系统中,商品信息、库存、用户行为统计、排行榜等业务模型复杂,往往需要对数据进行聚合、计数、排序等操作。Redis 可以在缓存层直接完成这些逻辑,减少应用层计算和数据库访问压力。而 Memcached 仅支持简单的字符串结构,复杂业务需要在应用层处理,灵活性明显不足。因此在热点商品、高并发访问场景下,Redis 更有优势。
其次,Redis 支持数据持久化和高可用架构。Redis 提供 RDB 和 AOF 两种持久化机制,可以在缓存节点重启后快速恢复数据,避免缓存雪崩。而 Memcached 数据全部存储在内存中,一旦重启数据即全部丢失。在本案例中,Redis 结合 主从复制 + 哨兵模式,可以实现自动故障转移,保证缓存服务的高可用性,这对于双十二这种高峰业务尤为关键。此外,Redis 还支持集群模式,能够实现水平扩展,进一步分担热点访问压力。因此,从可靠性和可扩展性角度看,Redis 明显优于 Memcached。

在本案例中,大量恶意或异常请求不断查询数据库中不存在的商品 ID,这是导致数据库 CPU 使用率过高的重要原因之一。这类请求即使 Redis 缓存工作正常,也无法命中缓存,每次都会直接访问数据库,形成典型的缓存穿透问题
布隆过滤器是一种基于位数组和多重哈希函数的概率型数据结构,其核心特点是:可以快速判断一个元素“可能存在”或“一定不存在”。系统可以在缓存层之前,将所有合法商品 ID 预先写入布隆过滤器。当请求到达时,先通过布隆过滤器进行校验,如果判断结果为“一定不存在”,则直接返回结果或拒绝请求,不再访问 Redis 和数据库。这样,大量无效商品 ID 请求会被拦截在系统最外层,显著降低数据库访问压力。
需要注意的是,布隆过滤器存在一定的误判率(可能误判为存在),但不会误判不存在为存在。在电商场景中,即使出现少量误判,也只会导致请求继续访问缓存或数据库,不会影响数据正确性。通过合理设置位数组大小和哈希函数数量,可以将误判率控制在可接受范围内。因此,布隆过滤器在高并发、读多写少的业务场景下,是解决缓存穿透问题的高效手段,也能有效防止缓存失效瞬间引发的数据库击穿风险。

联系我们
隐私协议
用户协议
微信公众号
知乎
小红书
浙ICP备2021029036号
@2022-2026
嘉兴市安芯网络科技有限公司 版权所有