Reids之缓存雪崩、缓存穿透
1、缓存雪崩 缓存雪崩指的是原有的缓存数据出现了大批量的缓存过期,造成一时间大批量并发请求都到了数据库,造成数据库的压力激增,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。 【解决方案】 从上面的分析可以看出只有当缓存同时大批量过期的时候,才会出现缓存雪崩的情形,所以只要想办法让缓存过期的时间分散开来即可。那方法就多了,比如说将热数据的缓存时间设置长一点,冷数据的过期时间设置得短一点,另外数据也可以分类设置不同的过期时间,或者加一个随机扰乱因子。 2、缓存穿透 缓存穿透是指查询一个不存在于缓存且不存在于数据库的数据,这时如果遭到恶意攻击,频繁地请求这个缺失数据,必然会每次都要读缓存和读数据库,增加了数据库的压力负担。 【解决方案】 对于缺失的数据,每次请求完数据库之后,都要更新到缓存,设置其key对应的value为空即可。这样当下一次请求该缺失数据对应的key,就可以直接通过缓存判断了,不需要再去请求数据库。 ——缺点:显然,当数据缺失很多的时候,必然会极大地浪费缓存的内存空间。 采取bloom filter(布隆过滤器),布隆过滤器的原理如下。 3、布隆过滤器 首先明确我们要解决的问题,即如何快速判断一个数据是否存在于数据库中。那我们自然而然想到的便是采取hash思想,只需要将数据库中的所有数据key存储到一个hash结构中,便可以快速判断