当前位置: 首页 > news >正文

毕业设计做网站选题鸿蒙app开发公司

毕业设计做网站选题,鸿蒙app开发公司,建的企业网站如何在百度搜到,交友免费网站建设缓存穿透 什么是缓存穿透 缓存穿透说简单点就是大量请求的 key 根本不存在于缓存中#xff0c;导致请求直接到了数据库上#xff0c;根本没有经过缓存这一层。举个例子#xff1a;某个黑客故意制造我们缓存中不存在的 key 发起大量请求#xff0c;导致大量请求落到数据库…缓存穿透 什么是缓存穿透 缓存穿透说简单点就是大量请求的 key 根本不存在于缓存中导致请求直接到了数据库上根本没有经过缓存这一层。举个例子某个黑客故意制造我们缓存中不存在的 key 发起大量请求导致大量请求落到数据库。 缓存穿透的大致流程 如下图所示用户的请求最终都要跑到数据库中查询一遍。 解决办法 最基本的就是首先做好参数校验一些不合法的参数请求直接抛出异常信息返回给客户端。比如查询的数据库 id 不能小于 0、传入的邮箱格式不对的时候直接返回错误消息给客户端等等。 1缓存无效 key 如果缓存和数据库都查不到某个 key 的数据就写一个到 Redis 中去并设置过期时间具体命令如下 SET key value EX 10086 。这种方式可以解决请求的 key 变化不频繁的情况如果黑客恶意攻击每次构建不同的请求 key会导致 Redis 中缓存大量无效的 key 。很明显这种方案并不能从根本上解决此问题。如果非要用这种方式来解决穿透问题的话尽量将无效的 key 的过期时间设置短一点比如 1 分钟。 另外这里多说一嘴一般情况下我们是这样设计 key 的 表名:列名:主键名:主键值 。 2布隆过滤器 布隆过滤器是一个非常神奇的数据结构通过它我们可以非常方便地判断一个给定数据是否存在于海量数据中。我们需要的就是判断 key 是否合法有没有感觉布隆过滤器就是我们想要找的那个“人”。 具体是这样做的把所有可能存在的请求的值都存放在布隆过滤器中当用户请求过来先判断用户发来的请求的值是否存在于布隆过滤器中。不存在的话直接返回请求参数错误信息给客户端存在的话才会走下面的流程。 加入布隆过滤器之后的缓存处理流程图如下。 但是需要注意的是布隆过滤器可能会存在误判的情况。总结来说就是 布隆过滤器说某个元素存在小概率会误判。布隆过滤器说某个元素不在那么这个元素一定不在。 为什么会出现误判的情况呢? 我们还要从布隆过滤器的原理来说 我们先来看一下当一个元素加入布隆过滤器中的时候会进行哪些操作 使用布隆过滤器中的哈希函数对元素值进行计算得到哈希值有几个哈希函数得到几个哈希值。根据得到的哈希值在位数组中把对应下标的值置为 1。 我们再来看一下当我们需要判断一个元素是否存在于布隆过滤器的时候会进行哪些操作 对给定元素再次进行相同的哈希计算得到值之后判断位数组中的每个元素是否都为 1如果值都为 1那么说明这个值在布隆过滤器中如果存在一个值不为 1说明该元素不在布隆过滤器中。 然后一定会出现这样一种情况不同的字符串可能哈希出来的位置相同。 可以适当增加位数组大小或者调整我们的哈希函数来降低概率 缓存击穿 什么是缓存击穿 缓存击穿是指在缓存系统中某个被大量访问的热点数据在缓存中的有效期刚好到期而此时大量并发请求同时过来访问该数据由于缓存中已无此数据这些请求就会同时绕过缓存直接去访问数据库从而导致数据库瞬间承受巨大的查询压力可能会影响数据库甚至整个系统的正常运行。 解决方案 常见的解决方案有两种 互斥锁 互斥锁的解决思路就是在Redis进行缓存重建时拿到一个互斥锁其他请求拿不到这个锁就是乖乖等待锁的释放。 逻辑过期 逻辑过期的解决思路如下 在存入redis的value中增加一个字段该字段为过期时间加上x分钟通过计算就知道这个数据是否逻辑上过期事实上没过期一直存在redis中。 在redis进行缓存重建的时候会另开一个线程进行重建并拿到互斥锁其他线程拿不到数据想要缓存重建时也拿不到锁那就直接返回旧数据。 互斥锁方案由于保证了互斥性所以数据一致且实现简单因为仅仅只需要加一把锁而已也没其他的事情需要操心所以没有额外的内存消耗缺点在于有锁就有死锁问题的发生且只能串行执行性能肯定受到影响 逻辑过期方案 线程读取过程中不需要等待性能好有一个额外的线程持有锁去进行重构数据但是在重构数据完成前其他的线程只能返回之前的数据且实现起来麻烦 缓存雪崩 什么是缓存雪崩 实际上缓存雪崩描述的就是这样一个简单的场景缓存在同一时间大面积的失效后面的请求都直接落到了数据库上造成数据库短时间内承受大量请求。 这就好比雪崩一样摧枯拉朽之势数据库的压力可想而知可能直接就被这么多请求弄宕机了。 举个例子系统的缓存模块出了问题比如宕机导致不可用。造成系统的所有访问都要走数据库。 还有一种缓存雪崩的场景是有一些被大量访问数据热点缓存在某一时刻大面积失效导致对应的请求直接落到了数据库上。 这样的情况有下面几种解决办法 举个例子 秒杀开始 12 个小时之前我们统一存放了一批商品到 Redis 中设置的缓存过期时间也是 12 个小时那么秒杀开始的时候这些秒杀的商品的访问直接就失效了。导致的情况就是相应的请求直接就落到了数据库上就像雪崩一样可怕。 解决办法 1给不同的Key的TTL添加随机值推荐         操作简单当我们在做缓存预热的时候就有可能在同一时间批量插入大量的数据 那么如果它们的TTL都一样的话就可能出现大量key同时过期的情况 所以我们需要在设置过期时间TTL的时候定义一个范围追加该范围内的一个随机数。 2利用Redis集群提高服务的可用性         使用集群提高可靠性 3给缓存业务添加降级限流策略         微服务的知识 4给业务添加多级缓存           请求到达浏览器nginx可以做缓存未命中找Redis再未命中找JVM最后到数据库...... 总结 我个人感觉redis的缓存穿透和缓存击穿有部分是类似而缓存击穿和缓存雪崩又有一部分是类似的 缓存穿透和缓存击穿的大至区别 缓存击穿指缓存中没有但数据库中有的数据一般是缓存时间到期这时由于并发用户特别多同时读缓存没读到数据又同时去数据库去取数据引起数据库压力瞬间增大造成过大压力。缓存穿透指查询一个根本不存在的数据缓存层和存储层都不会命中每次都会去请求数据库若有大量这样的请求可能会导致数据库压力过大甚至崩溃。 缓存击穿和缓存雪崩的大至区别 涉及数据范围缓存击穿主要针对的是单个热点数据是由于单个关键数据的缓存过期大量请求同时访问这一数据而引发问题而缓存雪崩涉及的是大量数据是大量缓存数据在同一时间或短时间内集体失效导致大量请求冲向数据库。引发原因侧重缓存击穿更多是因为某个热点数据的缓存时间设置不当或者在缓存过期的瞬间有大量并发请求访问缓存雪崩除了可能因为缓存时间设置不合理外还可能由于缓存服务器故障、大量数据同时更新等原因导致大量缓存数据同时失效。问题表现形式缓存击穿是大量请求集中访问某一个特定数据缓存雪崩是大量请求分散地访问多个不同的数据但这些数据的缓存同时失效导致整体请求流量对数据库造成巨大冲击。 文章参考 Redis的缓存穿透、缓存雪崩、缓存击穿问题及有效解决方案_缓存雪崩和缓存穿透问题解决方案-CSDN博客
http://www.w-s-a.com/news/397070/

相关文章:

  • jsp网站建设模板下载十大免费excel网站
  • 网络公司网站图片网站建立好了自己怎么做优化
  • 云主机是不是可以搭建无数个网站百度快速seo优化
  • 房地产怎么做网站推广建立音乐网站
  • 川畅科技联系 网站设计网站开发的教学视频
  • 为什么学网站开发凡科登陆
  • 设计师常备设计网站大全中山精品网站建设信息
  • 杭州建设工程网seo服务是什么
  • 兼职做问卷调查的网站wordpress mysql设置
  • 怎么在百度上能搜到自己的网站山西seo谷歌关键词优化工具
  • 网站搭建免费模板飞鱼crm下载
  • 网站开发竞品分析app制作公司深圳
  • 网站建设ssc源码修复设计班级网站建设
  • 网站重定向凡科做网站不要钱
  • 佛山html5网站建设微信营销软件破解版
  • 网站单页做301南京百度推广
  • 私人做网站要多少钱展芒设计网页
  • 怎样网站制作设计如何在网上推广农产品
  • 做关键词排名卖网站聚名网
  • 吉林省住房城乡建设厅网站首页体育器材网站建设方案
  • 网站建设及维护专业手机金融界网站
  • 常州网站建设工作室建立网站有怎么用途
  • 如何盗取网站推广策划书模板
  • 游戏网站建设计划书网络开发需要学什么
  • 手机网站维护费网站开发包括网站过程
  • 懂做游戏钓鱼网站的网站建设技术的发展
  • 网站被百度收录百度一下你就知道 官网
  • 雅客网站建设做网站用什么做
  • 做宣传海报网站专业网站设计速寻亿企邦
  • 秦皇岛市住房和城乡建设局网站有关网站开发的参考文献