CACHE RELOAD机制设计和实现(防止CACHE失效引发雪崩)

本文分析了因CACHE失效引发的雪崩问题,提出了临时解决方案,包括SQL优化、MYSQL配置调整和磁盘分区修改。重点在于长期解决措施——Cache Reload机制设计,通过定期从DB重新加载缓存数据,避免高并发时的雪崩现象。文中介绍了该机制的实现步骤,包括使用Redis存储需要reload的缓存信息,并由Daemon server定时进行刷新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CACHE RELOAD机制设计和实现(防止CACHE失效引发雪崩)

故障分析:

当前逛正在做推广,流量突然暴增,QPS达到5000+,当首页部分缓存失效时,需要查询DB,但由于这部分业务逻辑很复杂导致这SQL包含多表join,groupby,orderby等,执行需要1S,产生的大量临时表,内存中都装不下,变成在磁盘上的临时表,但当时放临时表的磁盘分区容量只有20G,很快磁盘也爆了,结果显然网站打不开了。

总结为几点:

  • SQL语句优化不足
  • MYSQL tmp_table_size配置太小
  • 磁盘分区不合理/ TMPDIR路径配置不合理
  • 部门间沟通不足,大型推广前没事先打招呼。

临时解决措施:

由于当时持续大量用户访问,查询数据库一直挂住,导致缓存一直无法一套回去,首页那缓存一直处于未命中状态,恶性循环,雪崩了。

当时我们立马采取以下措施:

  • 调整MYSQL tmp_table_size,关于tmp_table_size请看下面详细描述。
  • 修改MYSQL临时表保存路径(TMPDIR)到较大分区
  • 简化业务逻辑,修改SQL,重新部署。

 

临时表使用内存(tmp_table_size):当我们进行一些特殊操作如需要使用临时表才能完成的join,Order By,Group By 等等
,MySQL 可能需要使用到临时表。当我们的临时表较小(小于 tmp_table_size 参数所设置的大小)的时候,MySQL 会将临时
表创建成内存临时表,只有当 tmp_table_size 所设置的大小无法装下整个临时表的时候,MySQL 才会将该表创建成 MyI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值