redis的缓存穿透原理及其解决方法(布隆过滤器原理)

redis的缓存穿透原理及其解决方法(布隆过滤器原理)

1、redis作为缓存的工作原理:客户端请求数据,如果redis中存在相应数据则直接返回,如果redis中不存在该数据,由MySQL查询返回,并将相应的键值存入redis中,便于保持redis中存在的数据为热数据。
redis的缓存穿透原理及其解决方法(布隆过滤器原理)
2、缓存穿透的原理:当客户端不断请求到redis中不存在的数据,导致每次请求都需要到数据库中查询数据,从而使得redis缓存没有发挥作用。
3、缓存穿透解决方法(布隆过滤器原理):
布隆过滤器原理的结论:使用布隆过滤器的查询的数据如果存在则不一定存在(存在假阳性,即hash冲突不可避免),查询到的数据不存在则一定不存在(由此来过滤掉大部分数据不存在的请求)。

布隆过滤器要解决的问题:如何从海量数据中快速判断大部分数据不存在。
判断的过程:
(1)使用位图来存储数据的:BitSet,该类是直接使用计算机的0、1位来存储的,在mysql中的数据,先通过hash映射到位图中,若存在则把相应bite改为1,由于直接使用bite来存储的,所以映射后的数据占用空间很少,即使mysql中有海量数据。
(2)通过映射判断该数据是否存在。redis的缓存穿透原理及其解决方法(布隆过滤器原理)
使用该原理便可以过滤掉大部分数据在mysql中不存在的请求,从而避免了大部分的缓存穿透请求。但是由于hash冲突无法避免(即假阳性),所以还是会有少部分请求会产生缓存穿透。redis的缓存穿透原理及其解决方法(布隆过滤器原理)
可以调节过滤的比例(一般可以稳定在3%),但无法完全过滤掉,只能不断减少比例,但会使得位图空间增大,hash映射计算更多,从而减低效率。