当redis服务器出现大量请求时可能出现的问题 您所在的位置:网站首页 iis启动瞬间访问量大 当redis服务器出现大量请求时可能出现的问题

当redis服务器出现大量请求时可能出现的问题

2023-08-11 01:42| 来源: 网络整理| 查看: 265

当redis服务器出现大量请求的时候,可能出现的问题如下,只是简单的聊了一下出现问题的原因和简单的处理办法,如果想了解得更加详细,可以复制关键字去百度百科搜索。 **

缓存预热:

** 场景:服务器启动后迅速宕机 大量请求过来,需要在缓存中获取数据,缓存中又没有,从而去数据库找,然后再将数据存入缓存,短时间内高强度操作redis导致出现问题 解决方案:系统启动前,提前将相关的缓存数据直接加载到缓存系统,避免用户请求的时候,先查询数据库,然后再将数据缓存的问题。 **

缓存雪崩:

** 大量请求过来,短时间范围内,大量的key集中过期,

瞬间过期数据量太大,导致对数据库服务器造成压力 避免key过期时间集中,可以有效解决雪崩现象(约40%)。 其它策略: 1.限流,降级处理:短时间范围内牺牲一些客户体验,限制一部分请求访问,降低应用服务器压力,待业务低速运转后再逐步放开访问。 2.根据业务数据进行分类错峰,A类90分钟。B类80分钟,C类70分钟。过期时间使用固定时间+随机值的形式,稀释集中到期的key的数量。 3.对mysql严重耗时业务进行优化,对数据库瓶颈进行排查,例如超时查询、耗时较高事务 **

缓存击穿:

** 单个key形成高热数据,但是这个key过期

缓存击穿就是单个高热数据过期的瞬间,数据访问量较大,未命中redis后,发起了大量对同一数据的数据库访问,导致对数据库服务器造成压力。 应对策略: 1.以电商为例,对于主打商品,在活动期间,加大对此类信息key的过期时长。 2.现场调整,监控访问量,对自然流量激增的数据延长过期时间设置为永久性的key。 3.启动定时任务,高峰期来临之前,刷新数据有效器,确保不丢失。 **

缓存穿透:

** 访问不存在的数据,跳过了合法数据的redis数据缓存阶段,每次访问数据库,导致对数据库造成压力,一般是属于黑客攻击造成。 应对策略: 1.缓存null,对查询结果为null的数据进行缓存,长期使用,定期清理,设定短时限,例如30到60秒,最高5分钟 2.白名单策略(效率很低)。 3.使用布隆过滤器,将数据库中所有的查询条件放入布隆过滤器中,当一个查询请求过来时,先经过布隆过滤器筛选,如果判断请求查询值存在则继续查,如果不存在就直接丢弃。 在这里插入图片描述 假设集合里面有3个元素{x, y, z},哈希函数的个数为3。首先将位数组进行初始化,将里面每个位都设置位0。对于集合里面的每一个元素,将元素依次通过3个哈希函数进行映射,每次映射都会产生一个哈希值,这个值对应位数组上面的一个点,然后将位数组对应的位置标记为1。查询W元素是否存在集合中的时候,同样的方法将W通过哈希映射到位数组上的3个点。如果3个点的其中有一个点不为1,则可以判断该元素一定不存在集合中。反之,如果3个点都为1,则该元素可能存在集合中,这里就不分析存在误判的情况了

redis的伪代码 String get(String key) { String value = redis.get(key); if (value == null) { if(!bloomfilter.mightContain(key)){ return null; }else{ value = db.get(key); redis.set(key, value); } } return value; }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有