app开发者平台在数字化时代的重要性与发展趋势解析
940
2022-12-02
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技术合集,不看悔终生系列
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~