Redis缓存问题

Redis就是用支持缓存的,它有什么缓存问题?

1、一致性问题

分布式系统的数据一般都是弱一致性,或最终一致性。因为有CAP原则,在一致性(Consistency)、可用性(Availbility)和分区容错性(Partition Tolerance,或叫分区耐受性。分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或可用性的服务)中只能三者取其二,由于分布式系统一定有分区容错性,所以只有一致性、可用性可选。二益取其重,所以只能牺牲一致性。

应对Redis缓存的一致性问题的办法是,采取合适的策略来降低缓存和数据库间数据不一致的概率,包括合适的缓存更新策略,更新数据库后及时更新缓存、缓存失败时增加重试机制。但无法保证两者间的强一致性。如果项目对缓存的要求是强一致性的,那么就不要使用缓存。

2、Redis 雪崩

如果所有的KEY都一起失效,那么所有的请求都会瞬时落在数据库上,数据库必然扛不住。唯一方法是重启数据库,然而重启之后,所有请求仍然会一起落在数据库上,再次将数据库打死。

策略是不同的KEY设置不同的过期时间;或者将不同的key分散于不同的服务器。

3、Redis缓存穿透

请求数据库中根本不存在的数据。数据库中不存在,那么redis中肯定也没有,然而外界或黑客却接连不断地请求,不断攻击导致数据库压力很大,严重会击垮数据库。

应对策略:
1)接口层增加校验,比如用户鉴权,参数做校验,不合法的校验直接 return,比如 id 做基础校验,id<=0 直接拦截。
2)应用布隆过滤器(Bloom Filter),如果数据库中不存在的数据直接返回

4、Redis缓存击穿

指一个 Key 非常热点,在不停地扛着大量的请求,大并发集中对这一个点进行访问,当这个 Key 在失效的瞬间,持续的大并发直接落到了数据库上,就在这个 Key 的点上击穿了缓存。缓存穿透跟雪崩效果差不多,但原因不同。雪崩是缓存大面积失效,而缓存穿透是持续请求一个数据。

策略:设置热点数据永不过期,或者加上互斥锁。

参考文章:
人类史上最全Redis技术合集,不看悔终生系列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值