锦州网站建设品牌,手机网站建设推荐乐云seo,网站框架设计好后怎么做,找人 做网站 一般注意缓存穿透 概念
缓存穿透指某一特定时间批量请求打进来并访问了缓存和数据库都没有的key#xff0c;此时会直接穿透缓存直达数据库#xff0c;从而造成数据库瞬时压力倍增导致响应速度下降甚至崩溃的风险#xff1b;
解决方案
一、通过布隆过滤器解决
原理#xff1a;将…缓存穿透 概念
缓存穿透指某一特定时间批量请求打进来并访问了缓存和数据库都没有的key此时会直接穿透缓存直达数据库从而造成数据库瞬时压力倍增导致响应速度下降甚至崩溃的风险
解决方案
一、通过布隆过滤器解决
原理将所有需要缓存的key通过hash算法全部放到布隆过滤器将对应下标对应的值置成1这样当请求进来时先去布隆过滤器里找发现对应index的key是1则去缓存拿数据为0则直接返回这样就避免了去数据库查询 优缺点布隆过滤器底层通过redis的bitMap实现是基于位的操作所以效率高但是需要提前将key存入过滤器这大大增加了前置成本并且key到index的映射通过hash算法那么必然会出现hash碰撞的问题 二、通过key-null
原理当请求进来从数据库查询回来的值为空时将对应的null值也存入redis这样下次请求时redis里已经有数据了就不会再怼到数据库了
优缺点思路清晰操作简单但是极端情况下会有N多key在数据库和缓存中都没有那这种实现就造成了redis里有过多的垃圾数据浪费了内存空间
三、增强前置判断
原理查询前在接口层做权限、逻辑校验尽可能多的判断key的合法性
优缺点使用成本低但并不足以规避掉缓存穿透的风险所以建议只做附加的解决方案使用
缓存击穿
概念
缓存击穿指某一特定时间批量请求打进来对一个特定的值进行查询并访问了缓存中没有但是数据库里存在的key此时会直接击穿缓存直达数据库从而造成数据库瞬时压力倍增导致响应速度下降甚至崩溃的风险需要注意的是这里说的缓存中没有包含两层意思一是缓存中本身没有二十缓存中有但是过期了(少量热点key过期)
解决方案
一、设置key的过期时间随机
原理在像redis批量设置key的时候尽量做到过期时间的随机性以此避免某一时间会有批量key过期导致的缓存击穿
优缺点虽然解决了缓存中同一时间批量key过期导致的击穿问题但是并不能解决缓存中压根就不存在key而造成的击穿
二、通过分布式锁解决
原理在查询数据库的时候加一个分布式锁使得某一特定时间内只有一个请求访问数据库访问成功后将查询到的值缓存近redis这样在下次访问时就不会造成击穿的现象了
需要注意的是针对非海量请求的业务这里加单机锁也问题不大无非就是将同一时间只有一个请求到数据改成了同一时间只有集群数量的请求到数据库问题应该也不大 优缺点无论是缓存中本身就没有还是缓存中的key过期了使用加锁的方式都能解决缓存击穿的问题但是却增加了加锁的成本
三、设置热点key永不过期
原理针对热点key批量过期造成的穿透问题将key设置成永不过期就能解决
优缺点与一一样只能解决key过期造成的击穿不能解决缓存中没有key造成的击穿并且热点key的确认也是门学问并不总能保证设置的热点key不遗漏
四、将key部署在不同的实例
原理针对集群部署的redis将热点key分开部署也能避免过期造成的击穿问题
优缺点只有集群才能使用且也只能解决key过期造成的击穿问题并不总能保证设置的热点key不遗漏
缓存雪崩
概念
与击穿相比雪崩表示过期或压根不存在的key是大量而不是一个或少量导致大量请求落到数据库
解决方案
一、通过设置过期时间随机来解决
设置key的时候加上随机过期时间尽量减少同一时间过期key的数量
二、设置锁
从缓存访问key开始就加锁当缓存没有则去数据库查查完塞入缓存最后释放锁如果是单机应用则直接加虚拟机锁集群部署的话则需使用分布式锁