面试题答案
一键面试缓存过期时间打散
- 环节:在设置商品缓存的过期时间时,避免大量缓存同时过期。为每个缓存设置一个随机的过期时间,例如在原本过期时间基础上,上下浮动一定比例(如 10% - 20%)。
- 原理:使缓存过期时间分散,降低同一时刻大量缓存失效的可能性,防止瞬间大量请求直接打到数据库,减轻数据库压力。
多级缓存
- 环节:构建多级缓存结构,比如采用本地缓存(如 Ehcache)和分布式缓存(如 Redis)结合。先从本地缓存读取数据,若本地缓存未命中,再从分布式缓存读取。若分布式缓存也未命中,才查询数据库,并将结果依次写入分布式缓存和本地缓存。
- 原理:本地缓存响应速度快,可拦截大部分请求,减少对分布式缓存的访问压力。即使分布式缓存出现雪崩,本地缓存仍能提供部分数据支持,降低对数据库的冲击。
缓存预热
- 环节:在系统启动前或访问高峰期到来前,提前将热门商品数据加载到缓存中。可以通过定时任务,从数据库读取热门商品数据并写入缓存。
- 原理:确保在高峰期时,大部分请求能直接从缓存获取数据,避免因大量缓存未命中导致数据库压力激增。
熔断与降级
- 环节:引入熔断机制,当数据库访问压力过大时,熔断对数据库的访问。同时,进行服务降级,比如返回兜底数据(如商品的默认信息、提示信息等)给前端。
- 原理:防止数据库因瞬间高并发请求而崩溃,保证系统的基本可用性,避免整个系统因数据库问题而瘫痪。
监控与报警
- 环节:部署监控系统(如 Prometheus + Grafana)对缓存命中率、数据库请求量、系统负载等关键指标进行实时监控。当缓存命中率急剧下降或数据库请求量超过阈值等可能引发缓存雪崩的情况出现时,及时通过邮件、短信等方式报警。
- 原理:让运维和开发人员及时发现系统潜在问题,提前采取措施应对,如增加缓存服务器、优化数据库查询等。