缓存穿透

缓存穿透是指当用户对Redis发出无效或者不存在的数据信息操作时,这条数据在Redis中不存在,Redis就会在MySQL数据库中查询,可时无效的信息在mysql数据库中也不存在,就会造成Redis一直查询MySQL,对MySQL造成极大压力

解决方式

方式一:返回缓存空值

这种方式有点像“以牙还牙”,对于你的不存在信息,Redis没有就先会查MySQL,MySQL也没有就为你返回一个空值,虽然是空值,但是我至少返回了。

但是这种方式是存在却缺陷的,举个例子:

比如说有个黑客对你的Redis发出来查询 id=-1 的信息,我们知道,id都是大于等于0的,不过好在你有返回空值的方式,驳回了他“无理的请求”,以后他在输入id=-1,Redis直接记住了,直接驳回。

但是这时候这名黑客 接连输入了 id=-2、-3、-4...,这下Redis傻了,对于这么多“无理的请求”,只好不断去问“大哥MySQL”。

大哥MySQL也烦了,就崩溃了。Redis也存了一肚子的空值

所以,若是有不同形式的无效信息,redis需要一直查询MySQL,MySQL没有后返回大量的空值在Redis中。你可得记住,空值不是空,空值也是值。

方式二:布隆过滤器

布隆过滤器是一种过滤器,本质上布隆过滤器是一种基于概率的数据结构,比较巧妙的概率性数据结构,特点是高效的插入和查询。可以用来告诉你“某样东西一定不存在或可能存在”

注:布隆过滤器一定可以判断不存在,但是对判断存在会有误差

缓存击穿

缓存击穿是指 Redis 缓存中有一些的热点数据 key 同时过期失效,或有一些非热点数据 Key 突然有大量的并发访问请求,这样会导致大量的并发请求直接穿透 Redis 缓存,涌入MySql数据库,巡检增大数据库的访问压力,甚至崩溃

解决方式

方式一:永不过期

就是设置 key 永不过期,就不会出现大量 key 过期失效的问题, 优点是维护简单,缺点是占用空间。且对于非热点数据的高并发访问无效

方式二:加锁

对于 Redis 缓存中 key 过期时,在 key 要查询 MySQL 数据库的时候加锁,这时只能让第一个请求进行查询数据库,然后把从数据库中查询到的值存储到 Redis 缓存中,对于其他的相同的 key 查询,可以直接从 Redis 缓存中获取即可

缓存雪崩

缓存雪崩是指在某一个时间段内,Redis缓存突然宕机或大量的 key 集中过期失效,如果这个时间段内有大量请求,而查询数据量巨大,所有的请求都会达到Mysql 数据库,数据库的访问量会暴增,引起数据库崩溃

解决方案

下图所示:

  • 图1的解决方式就是扩展redis的数量,防止大量数据涌入或单个redis服务器的崩坏。
  • 图2是当缓存已经失效时,通过加锁和队列来限制数据流量降低操作级别
  • 图3的目的将可能访问的数据提前放入redis中
  • 图4就是设置多个过期时间,以便于redis中的数据不会在同一时间全部失效

总结区分

上面的内容中若是不小心,很容易就会搞混淆。比如名字上很难区分穿透和击穿,概念上击穿和雪崩又有点相似。没事,看完下面保证你明明白白:

首先是穿透和击穿,我们从直觉上来说,击穿是不是比穿透跟尖锐一点

没错,你的感觉是对的。

我很喜欢举个例子:

你走在路上,遇到一个人对你突然无理取闹。

你只是会觉得这人神经病吧?!但是你对于他这种”无理的语言“,左耳朵进,右耳朵出,他的话只是穿过你的耳朵。结合上述穿透的例子,有感觉没?

但是如果你走在路上,有人对你的眼睛扔了个小石头。如果你平时戴眼镜,用的力气大一点就会击穿你的眼镜玻璃...

没事,不要紧张,只是个例子。

这说明保护眼睛十分重要的,尤其是作为程序员的我们,看完这篇就可以休息一下眼睛了。

这下应该可以深刻的体会到两者区别了吧

其次是击穿和雪崩

对比一下概念,这两个整的是太像了,感觉都是Redis中数据失效,直接去查MySQL数据库的。

我们还是用心感觉一下两个词,如果说击穿是尖锐的,那么雪崩就和他的名字一样

感觉上是不是雪崩就比击穿范围要大,击穿可以是面,但在雪崩面前,他就是点。

击穿的重点是,我的操作的信息本该打到Redis上的,可是Redis中存的过期了,打穿了。

雪崩的重点是,Redis本是缓存系统假设缓存了100条,我突然查了10000000条数据进去,不崩才怪。

创作不易,转载可私信。未经同意禁止转载!!!

看完包你搞懂Redis缓存穿透、击穿和雪崩!!!说到做到的更多相关文章

  1. 【干货!!】三句话搞懂 Redis 缓存穿透、击穿、雪崩

    前言 如何有效的理解并且区分 Reids 穿透.击穿和雪崩之间的区别,一直以来都挺困扰我的.特别是穿透和击穿,过一段时间就稀里糊涂的分不清了. 为了有效的帮助笔者自己,以及拥有同样烦恼的朋友们区分这三 ...

  2. Windows PowerShell是啥?看完本文你就懂它了

    这篇文章主要介绍了Windows PowerShell是啥?Windows PowerShell是什么?Windows PowerShell有哪些特性?Windows PowerShell有什么用?看 ...

  3. redis与mysql性能对比、redis缓存穿透、缓存雪崩

    写在开始 redis是一个基于内存hash结构的缓存型db.其优势在于速读写能力碾压mysql.由于其为基于内存的db所以存储数据量是受限的. redis性能 redis读写性能测试redis官网测试 ...

  4. Redis 缓存穿透

    Redis 缓存穿透 https://www.cnblogs.com/jiekzou/p/9212114.html 场景描述:我们在项目中使用缓存通常都是先检查缓存中是否存在,如果存在直接返回缓存内容 ...

  5. Redis缓存穿透,缓存击穿,缓存雪崩,热点Key

    导读 使用Redis难免会遇到Redis缓存穿透,缓存击穿,缓存雪崩,热点Key的问题.有些同学可能只是会用Redis来存取,基本都是用项目里封装的工具类来操作.但是作为开发,我们使用Redis时可能 ...

  6. Redis缓存穿透、缓存雪崩、redis并发问题 并发竞争key的解决方案 (阿里)

    阿里的人问我 缓存雪崩(大量数据在同一时间过期了)了如何处理,缓存击穿了如何处理,回答的很烂,做了总结: 把redis作为缓存使用已经是司空见惯,但是使用redis后也可能会碰到一系列的问题,尤其是数 ...

  7. redis缓存穿透穿透解决方案-布隆过滤器

    redis缓存穿透穿透解决方案-布隆过滤器 我们先来看一段代码 cache_key = "id:1" cache_value = GetValueFromRedis(cache_k ...

  8. Redis缓存穿透和缓存雪崩以及解决方案

    Redis缓存穿透和缓存雪崩以及解决方案 Redis缓存穿透和缓存雪崩以及解决方案缓存穿透解决方案布隆过滤缓存空对象比较缓存雪崩解决方案保证缓存层服务高可用性依赖隔离组件为后端限流并降级数据预热缓存并 ...

  9. 预防Redis缓存穿透、缓存雪崩解决方案

    最近面试中遇到redis缓存穿透.缓存雪崩等问题,特意了解下. redis缓存穿透: 缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有.这样就导致用户查询的时候,在缓存中找不到,每次都要去 ...

  10. redis缓存穿透,缓存击穿,缓存雪崩

    概念解释 redis 缓存穿透 key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源.比如用一个不存在的用户id获取用户信息,不论缓存还是数据库 ...

随机推荐

  1. Redis理论

    什么是Redis Redis(Remote Dictionary Server)是使用C语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库. Redis可以存储键和五种不同类型 ...

  2. Mysql高级2-SQL性能分析

    一.SQL执行频率 MySQL客户端 连接成功后,通过show [session | global] status 命令可以提供服务器状态信息,通过如下指令,可以查看当前数据库的insert,upda ...

  3. 查看UUID

    查看硬盘UUID: 1. ls -l /dev/disk/by-uuid 2. blkid /dev/sda5 修改硬盘UUID: 1.新建和改变分区的UUID sudo uuidgen | xarg ...

  4. 理解linux的CPU上下文切换

    前言 linux是一个多任务操作系统,它支持远大于CPU数量的任务同时运行.当然,这个同时运行不是真的同时运行,而是系统在很短的时间内轮流分配CPU资源,由于CPU的速度很快,所以给人一种同时运行的错 ...

  5. 数据可视化【原创】vue+arcgis+threejs 实现流光立体墙效果

    本文适合对vue,arcgis4.x,threejs,ES6较熟悉的人群食用. 效果图: 素材: 主要思路: 先用arcgis externalRenderers封装了一个ExternalRender ...

  6. 重要变更 | Hugging Face Hub 的 Git 操作不再支持使用密码验证

    在 Hugging Face,我们一直致力于提升服务安全性,因此,我们将对通过 Git 与 Hugging Face Hub 交互时的认证方式进行更改.从 2023 年 10 月 1 日 开始,我们将 ...

  7. OpenStack-T版+Ceph

    OpenStack OpenStack 中有哪些组件 keystone:授权 [授权后各个组件才可以进行相应的功能] Keystone 认证所有 OpenStack 服务并对其进行授权.同时,它也是所 ...

  8. iOS越狱后必装软件

    iOS越狱后就跟ubuntu没两样了,很多ubuntu下常用的软件都要装一下 openssh 这个软件可以让我们能够登录iphone Apt-get 用这个软件可以安装很多软件,主要是一些工具调试类软 ...

  9. C# Wke例子 -- WebUI登录窗口

    概述 Wke介绍: http://blog.csdn.net/sabrecode/article/details/78145938 用Wke做了一个登录窗口, webui比较特殊. 因为它就是一个超文 ...

  10. 多主架构:VLDB技术论文《Taurus MM: bringing multi-master to the cloud》解读

    本文分享自华为云社区<多主创新,让云数据库性能更卓越>,作者: GaussDB 数据库. 华为<Taurus MM: bringing multi-master to the clo ...