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

    愿你走出半生,归来仍是少年!
  • 相关阅读:
    [LeetCode]Binary Tree Inorder Traversal
    [LeetCode]Binary Tree Preorder Traversal
    [LeetCode]Number of 1 Bits
    [LeetCode]Best Time to Buy and Sell Stock IV
    第四章 线程
    第三章 进程描述和控制
    第二章 操作系统概述
    第一章 计算机系统概述
    Qt创建对话框的三种方法
    strdup函数
  • 原文地址:https://www.cnblogs.com/hujunwei/p/12927194.html
Copyright © 2011-2022 走看看