网站如何做QQ登录,深圳全网营销方案,做招投标网站,员工oa系统缓存穿透、缓存击穿与缓存雪崩
1.本质区别
缓存穿透指的是数据库不存在数据#xff0c;导致无法缓存#xff0c;每次查询都查数据库#xff0c;数据库压垮
缓存击穿指的是缓存键值对key过期了#xff0c;key过期期间#xff0c;大量请求访问#xff0c;不经过缓存导致无法缓存每次查询都查数据库数据库压垮
缓存击穿指的是缓存键值对key过期了key过期期间大量请求访问不经过缓存直接请求数据库数据库压垮
缓存雪崩指的是key同时过期请求不经缓存全部到数据库数据库压垮
2.根据各自特点解决方案
缓存穿透
1.查询为null将null缓存key过期时间设置短一些主要防止恶性攻击
2.redisson实现的布隆过滤器底层bitmap里面存的是二进制0和1,。开始都是0一个数据存储key经过3次hash运算模于数组找到数组对应索引将0改为1这样3个数组位置就能表名一个key是存在的即键值对数据存在。但存在误判C不存在hash运算取模1个值属于A2个值数据BA与B均存在三个数组位置都是1会误判C存在概率不超过5%
缓存击穿
1.使用互斥锁如redis的setnx设置互斥锁缓存失效不立即去数据库查询先去强锁哪个线程获得去数据库查询获取不到就等待重试查询缓存这种办法数据强一致性但性能低而且可能会死锁。 2.key设置逻辑过期非实际物理过期设置key的时候设计一个过期时间字段一起存入缓存中而不给key设置过期时间。查询的时候从redis中取出判断时间是否过期如果过期开通另一线程进行数据同步当前线程正常返回数据返回的是旧数据这种办法性能高但是无法做到数据强一致性
缓存雪崩
解决方案将原有失效时间上随机加上随机值比如1-5分钟随机这样就不会同一时刻大量的key同时失效缓存过期时间重复率降低