当前位置:朝夕网 » 数码科技 » 缓存常见问题及解决方式

缓存常见问题及解决方式

缓存常见问题由于引入缓存首先需要考虑的就是缓存更新的方式,之前在缓存更新的几种模式中我们介绍过。除了这个问题还有一些常见的问题,整理出一个表格,如下图所示:缓存问题产生原因解决方案缓存不一致同步更新失

缓存常见问题

由于引入缓存首先需要考虑的就是缓存更新的方式,之前在缓存更新的几种模式中我们介绍过。除了这个问题还有一些常见的问题,整理出一个表格,如下图所示:

缓存问题

产生原因

解决方案

缓存不一致

同步更新失败、异步更新

最终一致

缓存穿透

恶意攻击

空对象缓存、布隆过滤器

缓存击穿

热点key失效

互斥更新、随机退避、

缓存雪崩

缓存挂掉

快速失败熔断、主从模式、集群模式、差异失效时间

大key

存储value很大、集合数据过多、数据未清理

拆分key,清理key

热点key

预期外的访问量陡增,如突然出现的爆款商品

对key进行rehash然后复制到不同集群,使用读写分离架构

数据不一致一致性问题

数据不一致的问题,可以说只要使用缓存,就要考虑如何面对这个问题。缓存不一致产生的原因一般有两方面:

选择缓存更新模式的不同造成的不一致,例如[缓存更新的几种模式]的Cache Aside不管是先更新db还是先删除或更新cache,在高并发的情况下都有可能造成不一致的情况,只是不同的更新方式造成不一致的概率不一样,尽可能的选择造成不一致概率最小的更新模式。系统问题导致失败造成的不一致,在这里就是如缓存服务的机器宕机,网络异常造成的更新失败等。解决方案采用强一致性协议,很少使用。最终一致性,在绝大部分场景中,特别是互联场景下,大多是保证最终一致性。 重试机制mq 更新数据库,若这一步就失败,更新事务失败回滚。 更新缓存失败,将失败的数据写入mq 消费mq得到失败的数据,重新删除缓存 订阅数据库binlog[参考MySQL复制原理及应用canal],解耦缓存更新过程。缓存穿透问题

产生这个问题的原因可能是外部的恶意攻击,例如,对用户信息进行了缓存,但恶意攻击者使用不存在的用户id频繁请求接口,导致查询缓存不命中,然后穿透 DB 查询依然不命中。这时会有大量请求穿透缓存访问到 DB,增加数据库压力甚至导致系统宕机。

解决方案业务上做非法参数的校验,尽量避免非法请求打到缓存。对不存在的用户,在缓存中保存一个空对象进行标记,防止相同 ID 再次访问 DB。不过有时这个方法并不能很好解决问题,可能导致缓存中存储大量无用数据。使用 BloomFilter 过滤器,BloomFilter 的特点是存在性检测,如果 BloomFilter 中不存在,那么数据一定不存在;如果 BloomFilter 中存在,实际数据也有可能会不存在。非常适合解决这类的问题。布隆过滤器

下面简单介绍下布隆过滤器,布隆过滤器内部维护一个bitArray(位数组), 开始所有数据全部置 0 。当一个元素过来时,能过多个哈希函数来实现负载均衡,还要考虑从节点数量显著增加后带来故障率增加的问题。Redis集群架构变更会为监控、运维、故障处理带来了更大的挑战。

以上就是朝夕生活(www.30zx.com)关于“缓存常见问题及解决方式”的详细内容,希望对大家有所帮助!

免责声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如有侵权行为,请第一时间联系我们修改或删除,多谢。朝夕网 » 缓存常见问题及解决方式