缓存相关问题

1.缓存预热

解决的问题:缓存预热就是系统上线后,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,由于缓存中没有任何数据,而并发地全部访问数据库。

解决方法即提前将相关的缓存数据直接加载到缓存系统

2.缓存雪崩

问题:

        在一个较短的时间内,缓存中较多的key过期,恰恰就是在较短的时间内,有很多请求访问过期key而未命中,让请求到达数据库,数据库同时接收大量的请求,而无法及时处理,导致数据库崩溃。redis得不到数据库的响应,无法释放链接,导致redis集群崩溃。应用服务器无法及时得到redis的响应,同时新的请求不断到来,应用服务器崩溃。同时重启应用服务、redis服务、数据库服务,重启以后,海量请求呼啸而至,缓存中是空的,继续崩溃。

解决方案:

1.对key的过期时间进行分类错峰:均匀分布key的过期时间,避免大量key在较短时间内集中过期。

2.超热key永不过期

3.使用mq削峰,让呼啸而至的请求排队。(用户体验不好)

4.避免mysql慢查询 (超过long_query_time参数设定的时间阈值(默认10s),就被认为是慢的,是需要优化的。慢查询被记录在慢查询日志里。慢查询日志默认是不开启的。如果需要优化SQL语句,就可以开启这个功能,它可以让你很容易地知道哪些语句是需要优化的。)

3.缓存击穿

问题:

        redis中某一个高热key过期,同时海量请求都在访问这同一个高key,均未命中。海量请求呼啸而至,奔向数据库,数据库崩溃

解决方案:

1.在特殊节日前,预先设定阶段性高热key的过期时间

2.现场调整,对自然流量所推出来的新的高热key,延长其过期时间或者设置其为永久key

4.缓存穿透

问题:

        redis中出现大量未命中的请求。出现非正常URL的访问,这些访问由于没有走正常的应用,所以可以故意访问一类不可能存在的key,这些key不在缓存中,数据库中也没有。后续出现大量以上请求,很可能是懂技术的人在对服务器进行攻击!

解决方案:

1.缓存null:对查询结果为null的数据也进行缓存,设定较短的过期时间

2.白名单策略:采用布隆过滤器,布隆过滤器的思想是,将所有可能存在的key哈希到一个足够大的 bitmap 中,一个一定不存在的数据会被这个 bitmap 拦截掉,从而避免了对底层存储系统的查询压力附加 对于空间的利用到达了一种极致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值