网站设计注册,wordpress分类图标列表,网络营销的四大要素,网站建设 教程缓存穿透、缓存击穿、缓存雪崩有什么区别#xff0c;该如何解决#xff1f;
1.缓存预热
1.1 问题描述
请求数量较高#xff0c;大量的请求过来之后都需要去从缓存中获取数据#xff0c;但是缓存中又没有#xff0c;此时从数据库中查找数据然后将数据再存入缓存#xf…缓存穿透、缓存击穿、缓存雪崩有什么区别该如何解决
1.缓存预热
1.1 问题描述
请求数量较高大量的请求过来之后都需要去从缓存中获取数据但是缓存中又没有此时从数据库中查找数据然后将数据再存入缓存造成了短期内对redis的高强度操作从而导致问题
1.2 解决方案
缓存预热就是系统启动前提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候先查询数据库然后再将数据缓存的问题用户直接查询事先被预热的缓存数据
2.缓存穿透
2.1 问题描述
客户端查询根本不存在的数据使得请求直达存储层导致其负载过大甚至宕机。出现这种情况的原因可能是业务层误将缓存和库中的数据删除了也可能是有人恶意攻击专门访问库中不存在的数据。
2.2 解决方案
缓存空对象存储层未命中后仍然将空值存入缓存层客户端再次访问数据时缓存层会直接返回空值。 布隆过滤器将数据存入布隆过滤器访问缓存之前以过滤器拦截若请求的数据不存在则直接返回空值。
3.缓存击穿
3.1 问题描述
一份热点数据它的访问量非常大。在其缓存失效的瞬间大量请求直达存储层导致服务崩溃。
3.2 解决方案
永不过期热点数据不设置过期时间所以不会出现上述问题这是“物理”上的永不过期。或者为每个数据设置逻辑过期时间当发现该数据逻辑过期时使用单独的线程重建缓存。
加互斥锁对数据的访问加互斥锁当一个线程访问该数据时其他线程只能等待。这个线程访问过后缓存中的数据将被重建届时其他线程就可以直接从缓存中取值。
4.缓存雪崩
4.1 问题描述
在某一时刻缓存层无法继续提供服务导致所有的请求直达存储层造成数据库宕机。可能是缓存中有大量数据同时过期也可能是Redis节点发生故障导致大量请求无法得到处理。
4.2 解决方案
避免数据同时过期设置过期时间时附加一个随机数避免大量的key同时过期。
启用降级和熔断措施在发生雪崩时若应用访问的不是核心数据则直接返回预定义信息/空值/错误信息。或者在发生雪崩时对于访问缓存接口的请求客户端并不会把请求发给Redis而是直接返回。
构建高可用的Redis服务采用哨兵或集群模式部署多个Redis实例个别节点宕机依然可以保持服务的整体可用。