zoukankan      html  css  js  c++  java
  • Redis26:使用redis的原因,缓存穿透和缓存雪崩

    使用redis的原因,缓存穿透和缓存雪崩

    为什么使用redis而不使用map?

    map是本地缓存,随着jvm关闭而销毁,多实例时每个实例都要保存一份缓存。而redis是分布式缓存,多实例下只保存一份缓存,且提供持久化,即使服务器宕机数据也不会消失。

    缓存穿透

    访问大量没有做缓存的数据,导致大量请求落到数据库,数据库崩溃。

    解决方案:将所有存在的数据装入一个bitmap或者布隆过滤器中,一开始就把不存在数据的请求过滤掉,还可以查询数据库时无论数据存在还是不存在,都缓存一份空,这样短期内再访问就不会进入数据库了。

    缓存雪崩

    缓存同一时间大面积失效,导致很多请求落到数据库上导致数据库崩溃。

    解决方案:

    首先要设置合理的过期策略,过期时间通常要设置为固定时间+随机时间。

    其次要保证redis集群的高可用性,选择合适的持久化策略,使恢复的redis重新加载缓存。用本地的java缓存框架做缓存,请求先取java中的缓存,然后再查redis,如果都没有再查数据库。用限流组件来保证落到数据库的请求在一个合理的范围内,这样就能保证一部分用户使用正常,也能保证数据库不崩溃。被限流组件过滤掉的返回一个设计好的默认值或者提示。

  • 相关阅读:
    nightwatchjs --Expect element to not include text
    Iterating elements using NightWatchJS
    nightwatch 切换窗口
    nodejs读取配置文件
    spring 事务
    重载,重写,重构
    python 元组不变 列表可变
    WebStorm ES6 语法支持设置
    docker日志
    curl -O 下载文件
  • 原文地址:https://www.cnblogs.com/yinyunmoyi/p/13200661.html
Copyright © 2011-2022 走看看