踩坑日记(二):记一次线上业务—Redis 的缓存雪崩

迷南。 2023-01-23 09:54 103阅读 0赞

之前有介绍过目前小编负责的业务用户量相对是比较大的,并且几乎每次都有被攻击的情况。最近的一次线上问题是突然收到大量的数据库连接数不够用的异常预警。赶紧检查了数据库连接数使用情况,被分配的数量已经被用光了,并且不能临时增加连接数(和其他系统合用)。

但是之前遇到更大的流量也没有出现连接数不够用的情况,那肯定是某段业务的问题。通过监控来看出现大量查询用户信息的 sql 请求,但是业务中对已经对用户信息做了缓存处理,正常情况下不应该出现这种情况,到这里猜测可能遇到“缓存雪崩” 的现象了。

什么是缓存雪崩?
如果Redis中大量的缓存在同一时间全部失效掉,但是刚好这段时间同时有大量的请求被发起,那么去Redis 获取信息的时候没有获取到,就会直接去访问数据库,数据库的处理能力是有限的,有可能出现把数据库搞坏的情况。
简而言之,就是缓存中获取不到,而数据库中有数据,同时时间到期直接命中数据库。
1db066f4a19cdfe716155427ecb4bebb.png
遇到“缓存雪崩”大致有以下几种方案来解决:
1、加锁,保证单线程访问缓存,避免很多请求同时命中数据库。
2、Redis 缓存的Key值的失效时间不能设置为一样,建议写入缓存的时候采用随机时间来保证同一时间有大量缓存失效问题。
3、特殊情况下,可以将一些数据设置为用不失效。
小编这里采用的是第 2 中方案,在缓存用户信息的时候采用随机时间(某一时间范围内随机)。

发表评论

表情:
评论列表 (有 0 条评论,103人围观)

还没有评论,来说两句吧...

相关阅读

    相关 使用Cobar

    起因 起因是因为日志里经常报出锁等待超时的错误,并且这个是环环相扣的,一个锁等待会直接引发另外的锁等待,所以危害非常严重,影响非常深远。寻找原因发现是`C3P0`报出了`

    相关 redis缓存击穿问题

    前言: 首先先介绍下项目环境:SpringBoot+Redis+JPA等。之所以写这篇文章是为了总结下线上的一个击穿问题,以便于对redis有更为深刻的认识和理解。 这里我

    相关 小程序云函数开发

    前段时间为了参加校内的一个比赛,做了个识别东西的小程序,其实就是API的搬运工,把各种识别的API集合在一起。 API的调用是在云函数内,虽然早就听说,但是真正的用却是第一次

    相关 Oracle日记_20190522

    本来应该早就弄好的东西,但是因为操作问题,各种问题。 问题一:安装oracle到底需要不需要jdk? 8i之后的并不需要,自带相应需要的东西。 问题二:默认装的,实例名是