zoukankan      html  css  js  c++  java
  • Redis缓存穿透,缓存击穿,缓存雪崩原理及解决方案

    缓存穿透

      要查询的数据,redis中没有,数据库中也没有,那么每一次的查询都要经过redis和数据库,redis几乎没有起到该有的作用。

      解决这个问题的方式一般认为有两种:

      第一种是从数据库查询不到时,给查询的key一个空值,存入redis,失效时间可以短一些,那么对同一个不存在的key,就没有缓存穿透的问题。

      第二种是对于可以确定的key值,取hash值存储起来,当要查询的key值不在hash表中,直接丢弃。

      第一种方式的缺点是当key值很多时,会很大程度上增加redis的存储压力,这种方式比较适合key变化不是很快的场景。

      第二种方式的缺点是key值要已知,类似于白名单,很多场景都不太适用。

    缓存击穿

      一个很热的key值,从redis中失效清除后,突发的大量查询涌入数据库,导致数据库超负载。

      目前看到的解决方案,都是在数据库访问中加锁,控制数据库的访问量,防止数据库宕机。

    缓存雪崩

      redis数据库不能正常工作(也有可能工作正常,但是命中率很低),导致所有的查询请求都跑到数据库中来。

      解决方案,对于redis宕机的,使用集群,分化风险;对于命中率很低的场景,可以提前缓存到redis中,场景类似双11要提前下单,然后等到双11当天结账。

  • 相关阅读:
    vue-awesome-swiper 子项目内容高度适配问题
    ajax的原理及应用
    display:none opacity:0以及visibility:hidden的区别
    javascript 创建型设计模式
    圣杯布局和双飞翼布局
    javascript->对象继承
    js 宏任务和微任务
    android->按钮底部定位上移
    ios移动端开发的坑
    jvm系列 (五) ---类加载机制
  • 原文地址:https://www.cnblogs.com/zmld-cn/p/12732118.html
Copyright © 2011-2022 走看看