zoukankan      html  css  js  c++  java
  • redis 缓存穿透、击穿、雪崩

    缓存穿透:

       大量查询 redis 中不存在的key(用随救数进行查询),导致每次都会去查询数据库,造成数据库压力过大(甚至宕机)。

    解决办法:

     1.对我们的 api 接口 进行限流处理、用户授权、黑名单和白名单进行拦截。

     2.将不存在的 key 存到 redis 中并设置有效期,有效减轻短时间内重复 key 的查询。不推荐使用(一般随机数都是不相等的)。

     3.布隆过滤器

      介绍:它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。
     

     缓存击穿:

       在高并发的情况下,当一个缓存 key 过期时,因为访问该 key 请求较大,多个请求同时发现缓存过期,因此对多个请求同时数据库查询、同时向Redis写入缓存数据,这样会导致数据库的压力非常大;

     1.使用分布式锁
        保证在分布式情况下,使用分布式锁保证对于每个key同时只允许只有一个线程查询到后端服务,其他没有获取到锁的权限,只需要等待即可;这种高并发压力直接转移到分布式锁上,对分布式锁的压力非常大。

     2.使用本地锁
       使用本地锁与分布式锁机制一样,只不过分布式锁适应于服务集群、本地锁仅限于单个服务使用。

     3.软过过期
        设置热点数据永不过期或者异步延长过期时间;

     4.布隆过滤器

     缓存雪崩:

    缓存雪崩指缓存服务器重启或者大量的缓存集中在某个时间段失效,突然给数据库产生了巨大的压力,甚至击垮数据库的情况。
    解决思路:对不用的数据使用不同的失效时间,加上随机数。

    总结:

    穿透:查询 key 不存在的情况

    击穿:并发查询同一个 key 不存在的情况

    雪崩:查询多个 key 不存在的情况

  • 相关阅读:
    青石巷-仰天长笑出门去 七班岂是蓬嵩人
    D语言-变量、输入、输出、注释
    D语言-认识D语言&安装
    D语言-随机数游戏
    全网一定不是最好懂的C++线性筛素数
    【玩转SpringBoot】异步任务执行与其线程池配置
    【玩转SpringBoot】通过事件机制参与SpringBoot应用的启动过程
    【玩转SpringBoot】SpringBoot应用的启动过程一览表
    【玩转SpringBoot】让错误处理重新由web服务器接管
    【玩转SpringBoot】翻身做主人,一统web服务器
  • 原文地址:https://www.cnblogs.com/ming-blogs/p/11973570.html
Copyright © 2011-2022 走看看