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自动销毁,也不会产生大量的垃圾数据。

    愿你走出半生,归来仍是少年!
  • 相关阅读:
    约瑟夫环-我的解答与迷宫
    数据结构实验一
    typedef struct 是什么意思
    编程名言名句
    创建单链表
    离散实验一
    Angela Merkel poised for record poll win and historic third term
    我的生活计划-贵在执行,贵在坚持
    考研经验
    2010年河南省普通高校招生本科一批院校 平行投档分数线(理科)
  • 原文地址:https://www.cnblogs.com/hujunwei/p/12927194.html
Copyright © 2011-2022 走看看