怎么防止缓存击穿的问题?
注意缓存穿透和缓存击穿的区别!!!!
缓存穿透是指:数据不存在,导致数据全部打到数据库
缓存击穿是指,数据的访问量很大,但是数据在某一刻过期了,对这一条数据的大量访问请求都打到了数据库,例如微博一个热点新闻,该新闻设置了过期时间2小时,
当2小时到了,这个热点新闻失效的一瞬间,还有成千上万的请求要访问这个数据,发现缓存过期了,请求直接打到数据库了,导致数据库压力激增
解决办法就是设置数据永不过期
布隆过滤器的原理是什么?它的优点是什么?缺陷是什么?
布隆过滤器可以用来判断一个数据是否存在,但是可能存在误判
原理:使用大量的比特位用来,记录数据是否存在,存在比特位置为1,不存在为0,同时针对一条数据进行多次hash,将值对应的比特位置为1,这样可以减少碰撞,
结果更精确一些
优点:占用空间少,判断数据快
缺点:可能存在误判,但是布隆过滤器说数据不存在,那么数据一定不存在,如果说数据存在,那么数据不一定存在于数据库,并且数据删除,不能更新到布隆过滤器
实战:例如我们要判断id为100的数据在不在数据库中,可以使用布隆过滤器
1.项目启动,将数据库中所有的id查询出来,每个id进行三种hash算法得出三个下标
2.将三个下标对应的比特位置为1(可能其他id的hash值也相同,就出现了hash冲突,这也就是为什么会误判)
3.数据处理完成后,查询id为100的数据,先将id也进行三种hash运算,算出三个下标
4.如果三个下标对应的比特位值都为1,说明数据可能存在于数据