在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

Redis中怎么解决缓存过程存在的三大问题

157次阅读
没有评论

共计 1996 个字符,预计需要花费 5 分钟才能阅读完成。

本篇内容主要讲解“Redis 中怎么解决缓存过程存在的三大问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“Redis 中怎么解决缓存过程存在的三大问题”吧!

一、缓存穿透

缓存穿透意味着当用户查询数据库不存在数据时,返回的结果为空,并且结果不会在缓存中存储。假设用户不断发起这样的请求,它将永远不会访问缓存,导致所有查询都落在数据库上,从而导致数据库被打死。

public Object getGoods(Long goodsId) {
  // 从 Redis 获取 goods 信息
  Object goodsInfo = redisTemplate.opsForValue()
  .get(String.valueOf(goodsId));
  if (goodsInfo != null) {

  return goodsInfo;
  }
  // 从数据库查询 goods 信息,并存入 Redis
  goodsInfo = goodsDao.selectByGoodsId(goodsId);
  if (goodsInfo != null) {

  redisTemplate.opsForValue()
  .set(String.valueOf(goodsId), goodsInfo);
  }
  return goodsInfo;
}

假设 goodsId 没有负数情况,如果发起一个参数 goodsId = -1 的请求,这个数据在缓存中肯定不会存在,每次它都会进入查询数据库,并且数据查询结果也是 null,并且不会缓存结果到 Redis。

解:

1)通过用户认证、参数验证等,在上层拦截这些不合理的请求;

2)当数据库查询结果为空时,数据也被缓存,但缓存有效期设置较短,以免影响正常数据的缓存。

public Object getGoods(Long goodsId) {
  // 从 Redis 获取 goods 信息
  Object goodsInfo = redisTemplate.opsForValue()
  .get(String.valueOf(goodsId));
  if (goodsInfo != null) {

  return goodsInfo;
  }

  // 从数据库查询 goods 信息,并存入 Redis
  goodsInfo = goodsDao.selectByGoodsId(goodsId);
  if (goodsInfo != null) {

  redisTemplate.opsForValue()
  .set(String.valueOf(goodsId), goodsInfo
  , 60, TimeUnit.MINUTES);
  } else {// 查询为 null 同样存储
  redisTemplate.opsForValue()
  .set(String.valueOf(goodsId), null, 60,

  TimeUnit.SECONDS);
  }
  return goodsInfo;
}

二、缓存击穿

缓存击穿意味着当热点数据存储到期时,多个线程同时请求热点数据。因为缓存刚过期,所有并发请求都会到数据库查询数据。

解:
实际上,在大多数实际业务场景中,缓存击穿是实时发生的,但不会对数据库造成太大压力,因为一般的公司业务,并发量不会那么高。当然如果你不幸有这种情况,你可以通过设置这些热点键,使其永远不会过期。另一种方法是通过互斥锁来控制查询数据库的线程访问,但这种会导致系统的吞吐率下降,需要实际情况使用。

三、缓存雪崩

数据未加载到缓存中,或者缓存同时在大范围中失效,导致所有请求查找数据库,导致数据库、CPU 和内存过载,甚至停机。
一个简单的雪崩过程:
1)Redis 集群的大面积故障;
2)缓存失败,但仍有大量请求访问缓存服务 Redis;
3)在大量 Redis 请求失败后,请求转向数据库;
4)数据库请求急剧增加,导致数据库被打死;
5)由于你应用程序服务大部分都依赖于数据库和 Redis 服务,它很快就会导致服务器集群的雪崩,最后整个系统将彻底崩溃。
解:
事前:高可用的缓存
高可用的缓存是防止出现整个缓存故障。即使个别节点,机器甚甚至机房都关闭,系统仍然可以提供服务,Redis 哨兵 (Sentinel) 和 Redis 集群(Cluster) 都可以做到高可用。
事中:缓存降级(临时支持)
当访问次数急剧增加导致服务出现问题时,我们如何确保服务仍然可用。在国内使用比较多的是
Hystrix,它通过熔断、降级、限流三个手段来降低雪崩发生后的损失。只要确保数据库不死,系统总可以响应请求,每年的春节 12306
我们不都是这么过来的吗?只要还可以响应起码还有抢到票的机会。
事后:Redis 备份和快速预热
1)Redis 数据备份和恢复
2)快速缓存预热

到此,相信大家对“Redis 中怎么解决缓存过程存在的三大问题”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-26发表,共计1996字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 少妇裸体性生交 | 一级毛片日韩a欧美最爱 | 国产精品亚洲精品日韩已满 | 国产一区二区三区成人久久片 | 国产一级三级三级在线视 | 亚洲av色香蕉一区二区三区蜜桃 | 精品色网| 色翁荡息又大又硬又粗又视频图片 | 成年男女男免费视频网站不卡 | 一区二区三区四区在线不卡高清 | 蜜桃视频一区二区三区四区 | 欧美激情视频一区二区三区 | 亚洲手机在线 | 亚洲中文久久精品无码 | 日本久久精品免视看国产成人 | 欧美高清在线视频一区二区 | 精品72久久久久久久中文字幕 | 成人黄色免费在线观看 | 国产肉体xxxx裸体784大胆 | 成人午夜无人区一区二区 | 亚洲国产日韩欧美高清片a 亚洲国产日韩欧美一区二区三区 | 成人a毛片免费观看网站 | 色综合久久久久久久 | 亚洲av电影天堂男人的天堂 | 国产三级三级三级av精品 | 亚洲精品日本一区二区在线 | 99国产精品热久久久久久夜夜嗨 | 亚洲网址 | 性视频免费看 | 天堂中文资源网 | 嫩草影院未满十八岁禁止入内 | 日日噜噜夜夜狠狠久久丁香五月 | 欧美美女一区二区三区 | www视频在线观看免费 | 亚洲一久久久久久久久 | 国产精品短视频 | 亚洲欧美日韩国产成人 | 尤物视频在线 | 精品99视频 | 免费观看啪啪黄的网站 | 天天爽亚洲中文字幕 |