首页 > 其他 > 详细

redis 的高并发的理解

时间:2020-09-23 20:59:29      阅读:45      评论:0      收藏:0      [点我收藏+]

redis 的特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

 

技术分享图片

 

 

 

redis 在并发下出现的情况:

缓存穿透:

  用户发送数据(一条数据库中存在、redis中不存在的) 到redis中没有就去DB中查,如果DB中没有查询到,就返回给用户;若黑客使用这个漏洞 进行对数据库的攻击就会给数据库击垮。

解决的办法:

  1、添加过期时间

  2、添加一个布隆过滤器   

  布隆过滤器( 加载120万的数据需要 9秒,)是数据哈希到一个足够大额 bigMap 中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力,但是布隆过滤器有个一误判率是大约是3%

  DB查询到数据为空的时候, 把数据写入到redis中 key对应的value就是空值, 并设置key 的过期时间,设置过期时间最好使用1-5的随机数,

  

缓存击穿:

  用户发送请数据到redis中 发现redis的数据过期了。这个时候就会去查询数据库, 如果有大量的并发请求,发现有大量的数据在redis中过期了。这个时候就会给DB造成巨大的压力。

  解决的方法:

  1、设置redis中的key 为过期时间为随机数最大不超过5, 

  2、 在访问DB的时候加上锁, 如果是分布式就使用分布式锁。  使用互斥锁  (setNx )

缓存雪崩:

  当redis中数据在某一个时间段存在大量的过期时间,就会去请求DB 这样会给数据库带来巨大的压力或者是击垮数据库。

解决方法:

  在访问数据库的时候加锁

  设置队列关系

缓存预热:

  就系统上线的时候需要把数据库中的数据缓存到redis中,这个样就可以避免用户在查询的数据时候在从数据库中查了。 

解决的方法:

  1,系统上线后 实现都写好的执行缓存的刷新的页面进行操作。2,也可以手动的更新,3、定时刷新缓存 

如果缓存的数据不多的话  设置项目启动就可以启动缓存更新。

缓存更新:

  Redis默认的有6中策略可供选择

     比较常用有两种方案:

  1、定时去清理过期的缓存,

  2、 用户请求过来的时候,发现缓存中的数据过期了,在去数据库查在去根性·更新redis。

 

缓存降级

当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然需要保证服务还是可用的,即使是有损服务。系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降级。

降级的最终目的是保证核心服务可用,即使是有损的。而且有些服务是无法降级的(如加入购物车、结算)。

以参考日志级别设置预案:

(1)一般:比如有些服务偶尔因为网络抖动或者服务正在上线而超时,可以自动降级;

(2)警告:有些服务在一段时间内成功率有波动(如在95~100%之间),可以自动降级或人工降级,并发送告警;

(3)错误:比如可用率低

 

redis 的高并发的理解

原文:https://www.cnblogs.com/yishuo/p/12651439.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!