zoukankan      html  css  js  c++  java
  • 我爱java系列---【使用redis时,如何解决缓存穿透问题?】

    一、访问拓扑图

     二、什么是缓存穿透?

          1.用户通过浏览器访问nginx,nginx本地缓存中找不到数据,则从redis中找,redis中找不到数据,则从数据库中找。

          2.但是也没有这样的数据,所以redis中和nginx本地缓存中不会缓存;

          3.如果黑客利用这个逻辑漏洞,就专门找 你网站中不存在的数据,每秒高并发访问,直接会导致数据库服务器宕机。

          以上这种问题就叫做缓存穿透,因为透过了各种缓存,直接访问了数据库,最终导致数据库宕机。

    三、解决方案

          1.缓存预热:通过数据库的变化,来更新redis中的数据,查询的时候如果redis中查询不到数据直接返回为null,不再直接查询数据库。(下图为做过项目中的一个广告缓存预热流程)

           2.布隆过滤器

           3.如果从数据库中查询,查询到的结果为null,可以直接将这个数据缓存进redsi,超时时间设定为1-3秒,如果黑客想以短时间高并发来访问,则被redis拦截住,因为redis中有这样的数据,但是值为null,如果黑客不访问这个数据了,因为数据设置了超时时间,超过这个时间会被redis自动销毁,也不会产生大量的垃圾数据。

    愿你走出半生,归来仍是少年!
  • 相关阅读:
    伪类选择器
    子元素和后代元素选择器
    常用的选择器
    CSS语法
    javascript中caller和callee call和apply
    我的第一篇
    Python— isinstance用法说明
    Python—对Excel进行读写操作
    RAID5,RAID10磁盘的创建
    vi/vim编辑器用法
  • 原文地址:https://www.cnblogs.com/hujunwei/p/12927194.html
Copyright © 2011-2022 走看看