缓存雪崩和缓存穿透解决方案

缓存雪崩和缓存穿透解决方案

缓存雪崩和缓存穿透
缓存雪崩:简单的说就是缓存失效,原本该访问缓存的数据直接访问数据库,从而造成数据库和内存压力大,严重的可能导致数据库宕机、服务器崩溃。
解决方案:
1.使用分布式锁或者对列控制读数据库写缓存的线程数,保证这有一个个线程进行操作。缺 点降低了系统的吞吐量
2.redis中的key 失效时间尽量设置分布均匀
3.使用mq来解决缓存雪崩效应。
当大量请求访问redis中没有值,把查询参数投放在消息队列,消费者接收到消息查询数据库得到结果使用同步方式返回给生成者。
消息中间件具有缓存消息的功能
4.设置一级二级缓存。如果一级缓存失效的时候,让访问请求二级缓存,需要注意二级缓存失效时间最好比一级缓存失效时间长一点。
5.如果是某一台redis服务器宕机,可以搭建redis主备 进行高可用。

缓存上一级还可以设置服务降级、隔离、容错、熔断等防止雪崩。—-springcloud服务治理框架,服务容错机制hystrix

缓存穿透:
缓存的流程:用户查询数据的时候先查询缓存,如果缓存没有,在查询数据库,把查询得到的结果放入一份在缓存中,下次在查询的时候如果缓存中有数据,就直接返回给客户端从而降低数据库的压力。
缓存穿透:用户查询的数据在数据库中没有,从而缓存中也没有用户查询数据的结果。如果有人恶意攻击使用这个查询数据一直进行查询,导致数据库压力增大。

解决方案:1.把查询的空结果也缓存一份。这样就可以简单有效的避免绕过缓存直接查询数据库。
2.同时也可以单独设置个缓存区域存储空值,对要查询的key进行预先校验,然后再放行给后面的正常缓存处理逻辑

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100801.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle并非所有变量都已绑定

    oracle并非所有变量都已绑定给Model中变量赋初始值就OK了。

    2022年7月3日
    24
  • LightOJ 1027 A Dangerous Maze 概率期望

    LightOJ 1027 A Dangerous Maze 概率期望

    2022年3月7日
    32
  • C语言通过socket编程实现TCP通信「建议收藏」

    C语言通过socket编程实现TCP通信「建议收藏」服务端客户端通信例子:sockettcp通信1,sockettcp通信2,udp使用讲解,socketudp通信例子1.TCP/IP协议叫做传输控制/网际协议,又叫网络通信协议。实际上,它包含上百个功能的协议,如ICMP(互联网控制信息协议)、FTP(文件传输协议)、UDP(用户数据包协议)、ARP(地址解析协议)等。TCP负责发现传输的问题,一旦有问题就会发出重传信号,直到所…

    2022年7月13日
    17
  • datax(19):源码解读内置Transformer「建议收藏」

    datax(19):源码解读内置Transformer「建议收藏」通过datax(18)已经对transformer有了初步了解,继续撸代码,看datax已经内置的5种简单类型transformer;一、概述目前datax内置了5种常用的transformer,分别如下截取SubstrTransformer填充PadTransformer替换ReplaceTransformer过滤FilterTransformerGroovy类型GroovyTransformer二、SubstrTransformer主要是对record中的column的值进.

    2022年5月17日
    120
  • 手摸手教你写一个vue的toast弹窗[通俗易懂]

    手摸手教你写一个vue的toast弹窗[通俗易懂]前言:我们在项目开发的过程中,也许会在很多页面实现弹窗的消息,普通的方法就是在这每个界面写些原生js代码来控制弹窗效果,这样明显非常冗余。可通过引入组件的方式,可解决部分冗余的代码,但是每个要使用的界面都必须导入、注册、使用,这些代码还是比较冗余。通过插件的方式封装Toast,可解决每个页面重复导入、注册、使用的重复过程。一.封装Toast组件css自行设计二.Toast插件方式的封装在使用Toast前需要做相应的准备工作:添加一个index.js文件-里面定义一个对象-然后导

    2022年9月25日
    0
  • C++面试

    C++面试C++面试

    2022年4月22日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号