zoukankan      html  css  js  c++  java
  • Redis缓存中的常见问题

    缓存穿透:是指查询一个Redis和数据库中都不存在的数据。

    问题:查询一个Redis和数据库中都不存在的数据,大量请求去访问数据库,导致数据库宕机。

    解决办法:

    1、根据id查询,如果id是自增的,将id的最大值放到Redis中,在查询数据库之前,直接比较一下id。

    2、如果id不是整型,可以将全部的id放到set中,在用户查询之前,去set中查看一下是否有这个id。

    3、获取客户端的ip地址,可以将ip的访问添加限制。

    缓存击穿:是指查询一个Redis中没有但是数据库中存在的数据,并且这个数据是热点数据。

    问题:查询一个Redis中没有但是数据库中存在的数据,并且这个数据是热点数据,大量请求访问数据库,导致数据库宕机。

    解决办法:

    1、在访问的数据缓存中没有的时候,添加互斥锁,让少数请求可以访问数据库,避免数据库宕机。

    2、把热点数据的生存时间去掉(不推荐)

    缓存雪崩

    问题:当大量缓存数据同时到期,最终大量的请求去访问数据库,导致数据库宕机。

    结局办法:将缓存中数据的生存时间设置为随机时间。

    缓存倾斜:

    问题:大量的热点数据集中在一个Redis节点上,Redis无法承受住大量请求,从而导致Redis宕机。

    解决办法:

    1、扩展主从架构,搭建大量从节点,环节Reidis压力

    2、可以在Tomcat中做JVM缓存,在去Redis查询之前,先去Tomcat中查询,缓解Redis压力。

  • 相关阅读:
    spring 实现测试解耦
    Java 反射实例 (二)
    Java 反射实例
    Thread.join()
    缓存输入/输出流
    文件的拷贝
    将键盘输入的数据保存到文件中:OutputStream
    InputStream中read方法各个参数的意义
    OutputStream
    InputStream中的主要的子类
  • 原文地址:https://www.cnblogs.com/zz-1120-wtenlb/p/13939909.html
Copyright © 2011-2022 走看看