Redis缓存(缓存预热,缓存穿透,缓存雪崩,缓存击穿)

目录

一, 缓存

1, 什么是缓存

2, 什么是热点数据(热词)

3, 缓存更新策略

3.1 定期生成

3.2 实时生成

二, Redis缓存可能出现的问题

1, 缓存预热

1.1 什么是缓存预热

1.2 缓存预热的过程

2, 缓存穿透

2.1 什么是缓存穿透

2.2 缓存穿透产生的原因

2.3 缓存穿透的解决办法

3, 缓存雪崩

3.1 什么是缓存雪崩

3.2 缓存雪崩产生的原因

3.3 缓存雪崩的解决办法

4, 缓存击穿

4.1 什么是缓存击穿

4.2 缓存雪崩的解决办法


一, 缓存

1, 什么是缓存

Redis是一种内存数据库,最常用的场景就是作为缓存,加快用户查询的速度,核心思路就是把一些常用的数据(热点数据)放到触手可及(访问速度更快)的地方,方便随时读取.

1. 如何理解"触手可及"的地方?

硬件的访问速度,通常情况下:CPU寄存器 > 内存 > 硬盘 > 网络

硬盘相对于网络来说是"触手可及的",就可以使用硬盘作为网络的缓存(例如:浏览器的缓存,浏览器通过 http/https 从服务器上获取到如 html,css,js,图片,字体等进行展示,这些体积大又不会经常改变的数据就可以保存到浏览器本地硬盘,后续再打开这个页面的时候,就不必从网络上重新获取了)

2. 为什么说关系型数据库性能不⾼?

  1. 数据库把数据存储在硬盘上, 硬盘的 IO 速度并不快. 尤其是随机访问;
  2. 如果查询不能命中索引, 就需要进⾏表的遍历, 这就会⼤⼤增加硬盘 IO 次数;
  3. 关系型数据库对于 SQL 的执⾏会做⼀系列的解析, 校验, 优化⼯作;
  4. 如果是⼀些复杂查询, ⽐如联合查询, 需要进⾏笛卡尔积操作, 效率更是降低很多.

Redis作为缓存的图示:

2, 什么是热点数据(热词)

注意:Redis作为缓存的时候访问速度相比mysql等关系型数据库更快,访问速度快代表着成本越高,所以相对而言Redis的存储空间更少,所以一般存储在Redis里面的数据都是一些经常被访问的数据,这部分数据就被称为热点数据.

Redis作为缓存的时候一般满足"二八原则",即20%的数据可以满足大部分的访问需求,因为一般用户进行访问的时候大部分访问的数据都是热点数据,这些数据已经存储在Redis中,所以访问速度很快,且很多访问都只会命中Redis,不会去数据库中查找,大大降低了访问数据库的并发量.

3, 缓存更新策略

3.1 定期生成

定期生成策略就是会把访问的数据以日志的形式记录下来,然后根据更新的频率(一天更新一次/一周更新一次等)进行统计,统计该频率内访问最多的前20%(根据实际场景决定)作为热点数据,将这些热点数据存储到Redis中,下次访问这些热点数据的时候就可以快速的从Redis中获取了.

优点:这种方式实现起来比较简单,过程更可控(缓存中有啥都是固定的),方便后期排查问题;

缺点:实时性不高,如果出现一些突发性问题,有一些本来不是热词的词突然变成热词,Redis中并没有,此时就会直接访问数据库,数据库会面临巨大的压力.

3.2 实时生成

实时生成策略就是如果查询的数据在Redis中有就直接访问,如果没有就会在数据库中查询,返回结果的同时也会将查询的结果写入Redis,这样Redis的数据也会随着查询数据库这个操作不断更新,经过一段时间的"动态平衡",Redis中的数据逐渐成为热点数据了.

问题:Redis的存储空间是有限的,随着不断的更新会逐渐达到Redis的内存上限(Redis的内存可通过配置文件中的maxmemory参数进行设定),如果此时达到内存上限了该怎么办?

答:达到内存上限需要对Redis内存中的数据进行淘汰,通用的淘汰策略有以下几种:

FIFO (First In First Out) 先进先出:把缓存中存在时间最久的(也就是最先来的数据)淘汰掉;

LRU (Least Recently Used) 淘汰最久未使⽤的:记录每个key最近访问时间,把最近访问时间最老的key淘汰掉;

LFU (Least Frequently Used) 淘汰访问次数最少的:记录每个key最近一段时间的访问次数,把访问次数最少得淘汰掉;

Random 随机淘汰:从所有key中抽取幸运儿被随机淘汰掉.

二, Redis缓存可能出现的问题

1, 缓存预热

1.1 什么是缓存预热

使⽤ Redis 作为 MySQL 的缓存的时候, 当 Redis 刚刚启动, 或者 Redis ⼤批 key 失效之后, 此时由于 Redis ⾃⾝相当于是空着的, 没啥缓存数据, 那么 MySQL 就可能直接被访问到, 从⽽造成较⼤的压⼒. 因此就需要提前把热点数据准备好, 直接写⼊到 Redis 中.,使 Redis 可以尽快为 MySQL 撑起保护伞.

1.2 缓存预热的过程

缓存预热结合了定期生成和实时生成两种策略,先通过离线的方式,通过一些统计途径,把一些热点数据找到一批,导入到Redis中,此时这部分热点数据就可以帮数据库承担很大的压力了,随着时间的推移,逐渐就使用新的热点数据淘汰掉旧的数据.

2, 缓存穿透

2.1 什么是缓存穿透

访问的key在Redis和数据库中都不存在,此时这样的key不会被放到缓存上,后续如果仍然再访问这个key的时候依然会访问到数据库,这样就会导致数据库承担的请求太多,压力很大,这种情况被称为缓存穿透.

2.2 缓存穿透产生的原因

  • 业务设计的不合理,比如缺少必要的参数校验环节,导致非法的key也被查询了(这种情况最多);
  • 开发/运维误操作,不小心把部分数据从数据库中删除了(少);
  • 黑客恶意攻击(少).

2.3 缓存穿透的解决办法

  • 针对要查询的参数进行严格的校验,比如要查询的key是用户的手机号,那么就需要校验当前key是否满足一个合法的手机号的格式;
  • 针对数据库上不存在的key也需要在Redis中保存,该key所对应的value可以设置为空,避免后续频繁访问数据库;
  • 使用布隆过滤器(本质上使用hash+bitmap的思想,能够用较少的空间判定某个元素是否存在)先判定key是否存在,再进行查询.

3, 缓存雪崩

3.1 什么是缓存雪崩

短时间内⼤量的 key 在缓存上失效, 导致数据库压⼒骤增, 甚⾄直接宕机

3.2 缓存雪崩产生的原因

大规模的key失效,可能性主要有两种:

  • Redis挂了;
  • Redis上的大量key同时失效(可能这些key设置了相同的过期时间).

3.3 缓存雪崩的解决办法

  • 加强监控警报,加强Redis集群可用性的保证;
  • 不给key设置过期时间或者不设置相同的过期时间(如添加随机因子从而避免同一时刻过期).

4, 缓存击穿

4.1 什么是缓存击穿

相当于缓存雪崩的特殊情况. 针对热点 key , 突然过期了, 导致⼤量的请求直接访问到数据库上, 甚⾄引起数据库宕机,缓存击穿区分于缓存雪崩的地方在于缓存击穿更加侧重于热点key.

4.2 缓存雪崩的解决办法

  • 基于统计的方式发现热点key,并设置永不过期;
  • 进行必要的服务降级,例如访问数据库的时候使用分布式锁,限制同时请求数据库的并发数.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/104793.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

优思学院|中质协六西格玛考试形式是什么样的?

中质协的考试形式主要为单选和多选题,近年也有加了一小部分填空题,和国际认证考试有很大区别,因为美质协(ASQ)、国际精益六西格玛研究所(ILSSI),又或者著名的PMP项目管理认证等都是采…

Java性能分析工具

Arthas 官网:简介 | arthas Arthas 是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业…

Spark SQL概述与基本操作

目录 一、Spark SQL概述 (1)概念 (2)特点 (3)Spark SQL与Hive异同 (4)Spark的数据抽象 二、Spark Session对象执行环境构建 (1)Spark Session对象 (2)代码演…

【深度学习实验】循环神经网络(五):基于GRU的语言模型训练(包括自定义门控循环单元GRU)

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容(一)自定义门控循环单元(GRU,Gated Recurrent Unit)1. get_params2. init_gru_state3. gru (二)创建模型0. 超参数…

3. 博弈树 (15分)

下棋属于一种博弈游戏,博弈过程可以用树(博弈树)来表示。假设游戏由两个人( A 和 B )玩,开始由某个人从根结点开始走,两个人轮流走棋,每次只能走一步, 下一步棋只能选择当…

OTA语音芯片NV040C在智能电动牙刷的应用

以往我们对牙齿的清洁是使用的是手动方式进行,用柔软的牙刷刷毛去进行牙齿的清洁。但现在我们拥有了一种新颖的刷牙方式,靠电力去驱动、清洁我们的牙齿。电动牙刷的刷头通过快速旋转,产生高频振动,将牙膏迅速分解为细小的泡沫&…

支付宝支付接入流程

一、 接入准备 支付宝支付流程没有微信那么复杂,而且支付宝支持沙箱。登录支付宝开放平台控制台 点击开发工具中的沙箱 接口加密方式,我这里使用的是自定义密钥。生成密钥的方式 使用支付宝官方提供的密钥工具,唯一要注意的是支付宝密钥工具…

idea + Docker-Compose 实现自动化打包部署(仅限测试环境)

一、修改docker.service文件,添加监听端口 vi /usr/lib/systemd/system/docker.service ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock重启docker服务 systemctl daemo…

线性代数3:矢量方程

一、前言 欢迎回到系列文章的第三篇文章,内容是线性代数的基础知识,线性代数是机器学习背后的基础数学。在我之前的文章中,我介绍了梯队矩阵形式。本文将介绍向量、跨度和线性组合,并将这些新想法与我们已经学到的内容联系起来。本…

基于 Redis + Lua 脚本实现分布式锁,确保操作的原子性

1.加锁的Lua脚本: lock.lua --- -1 failed --- 1 success--- getLock key local result redis.call(setnx , KEYS[1] , ARGV[1]) if result 1 then--PEXPIRE:以毫秒的形式指定过期时间redis.call(pexpire , KEYS[1] , 3600000) elseresult -1;-- 如果value相同&…

数据清洗(data clean)

整理了下数据清洗的基本流程,异常值部分整理在了EDA中。

什么是简单网络管理协议(SNMP)

简单网络管理协议(SNMP:Simple Network Management Protocol)是由互联网工程任务组(IETF:Internet Engineering Task Force )定义的一套网络管理协议。该协议基于简单网关监视协议(SGMP&#xf…

React中的Virtual DOM(看这一篇就够了)

文章目录 前言了解Virtual DOMreact创建虚拟dom的方式React Element虚拟dom的流程虚拟dom和真实dom的对比后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:react合集 🐱‍👓博主在前端领域还有很多知识和技术需要掌…

DevOps持续集成-Jenkins(3)

文章目录 DevOpsDevOps概述Jenkins实战3:实战1和实战2的加强版(新增SonarQube和Harbor)⭐环境准备⭐项目架构图对比Jenkins实战1和实战2,新增内容有哪些?SonarQube教程采用Docker安装SonarQube (在Jenkins所…

生成树协议:监控 STP 端口和交换机

什么是生成树协议 生成树协议 (STP) 用于网络交换机,以防止循环和广播风暴。在局域网 (LAN) 中,两条或多条冗余路径可以连接到同一网段。当交换机或网桥从所有可用端口传输帧时,这些帧开始在网…

基于单片机设计的智能窗帘控制系统

一、前言 智能家居技术在近年来取得了巨大的发展,并逐渐成为人们日常生活中的一部分。智能家居系统带来了便利、舒适和高效的生活体验,拥有广泛的应用领域,其中之一就是智能窗帘控制系统。 传统窗帘需要手动操作,打开或关闭窗帘…

华硕天选1天选2天选3天选4天选air原厂预装出厂系统恢复安装教程方法

华硕天选1天选2天选3天选4天选air原厂预装出厂系统恢复安装教程方法 第一:自备原装swm/esd/wim/iso等格式系统文件,以上这几种格式文件安装恢复非常简单,使用PE工具即可完成恢复安装,还有一种安装方法就是华硕zip工厂恢复模式 1.首先需要自…

Adaptive AUTOSAR RTA-VRTE工具链介绍

ETAS Adaptive AUTOSAR RTA-VRTE是一种面向服务架构的中间件方案,提供了自适应AutoSAR平台,为应用层软件提供了运行环境. RTA-VRTE start kit的构建系统在主机VM内执行,可以创建AUTOSAR自适应应用程序并将其部署到一个或多个目标ECU虚拟机.

【VPX610】 青翼科技基于6U VPX总线架构的高性能实时信号处理平台

板卡概述 VPX610是一款基于6U VPX架构的高性能实时信号处理平台,该平台采用2片TI的KeyStone系列多核DSP TMS320C6678作为主处理单元,采用1片Xilinx的Virtex-7系列FPGA XC7VX690T作为协处理单元,具有2个FMC子卡接口,各个处理节点之…

linux-文件系统

目录 一、文件系统 1.分区 2.文件系统分类 3.文件系统创建工具 4.查看文件系统的属性 5.挂载 6.buffer和cache 一、文件系统 1.分区 1-4个主分区 第五个序号开始,是逻辑分区 2.文件系统分类 vfs文件系统 ------------- virtualenv file System&#xff0…