当前位置: 首页 > news >正文

redis的高可用及性能管理和雪崩

redis的高可用

redis当中,高可用概念更宽泛一些。

除了正常服务以外,数据量的扩容,数据安全。

实现高可用的方式:

1、持久化 最简单的高可用方法,主要功能就是备份数据。

把内存当中的数据保存到硬盘当中。

2、主从复制

3、在主从复制的基础上,部署哨兵模式。

4、redis集群


一、redis的持久化

内存当中的数据保存到硬盘

开启持久化之后,会有一个持久化的文件,通过文件进行恢复。

redis提供的持久化方式:

RDB持久化定时的将内存当中的数据保存,类似于快照的形式用二进制压缩存储,后缀名是.rdb,每次redis重新启动时,都会读取快照文件,进行恢复,默认的持久化方式

dbfilename dump.rdb rdb         持久化的文件名

 

save 900 1          当时间到900秒,过redis的数据发生一次变化,就会执行bgsave

save 300 10        当时间到300秒,如果redis的数据发生了10次变化,就会执行bgsave

save 60 10000    当时间到60秒,如果redis的数据发生了10000次变化,就会执行bgsave

save m n :只是配置文件当中的配置项,redis执行的命令是bgsave

save不能直接在命令行执行,一旦执行save,redis主进程会进入阻塞状态,这时读写都不能进行,直到save完成,才能继续读写,save在生产中时禁用的。

RDB持久化的工作方式:

bgsave就是rdb快照保存的方式。

bgsave在执行关闭redis服务的时候,也会自动执行bgsave

bgsave是主从复制的默认恢复模式,从节点执行全量恢复操作,主节点通过bgsave命令把rdb发送给从节点,除了配置文件save m n ,关闭redis会执行bgsave,开启redis也会执行bgsave。

AOF持久化:(主流)

他是把操作的数据库执行以日志的形式保存在指定的文件当中,文件的后缀名.aof,类似于mysql的binlog。

没有时间,没有位置,只有命令

AOF持久化的实时性更好,只要你操作了都会记录在日志文件中,进程出现意外时,丢失的数据更少,AOF是主流的持久化方式。

RDB和AOF两者是配合使用。

AOF默认是关闭的,需要开启。

如果同时开启RDB和AOF,哪个优先级高?

一旦开启AOF,系统默认选择AOF进行备份。

appendonly yes 打开AOF的功能

appendfsync everyesc 每秒主动更新一次

no-appendfsync-on-rewrite no 不是每次都一定要对AOF文件进行重写,手动来对AOF文件重写。

aof-load-truncated yes 如果发现AOF文件被截断,redis在启动时会自动修复AOF的文件,尽可能的对数据进行恢复。一旦是NO redis发现文件被截断,redis会拒绝启动。

AOF持久化的工作方式:

重写:

充分非必要条件

一旦开启AOF持久化之后,所有的数据库操作记录必然都会写入AOF持久化文件当中,AOF文件会越来越大,记录的操作越多,一旦要恢复,速度会很慢。

重写的作用:为了压缩AOF持久化文件。

重写就是把原内容压缩,后续新的读写,继续插入AOF文件,不管怎么写入,最后都会在AOF文件


RDB持久化和AOF持久化之间的优缺点

RDB文件小,传输的速度很快,适合全量复制,恢复速度比AOF快,性能上影响较小,但是数据安全不如AOF

AOF是秒级持久化,数据量全,兼容性好

缺点:文件大,恢复速度慢,性能影响大

但是支持全量和增量。数据安全大于一切。


redis性能管理:

info memory 查看系统占用的内存

userd memory:字节 redis中的数据占用内存的大小

used_memory_rss:字节 redis向系统申请的内存,随着数据占用的大小,自动扩容。

used_memory_peak:937408 占用系统内存的峰值

vim /etc/redis/6379.conf

进入配置文件

在配置文件设置redis占用系统的阈值,一定要设置阈值,不设置阈值会把所有的系统内存都占用了

设置一个阈值,看项目的大小来进行设置,没有一个固定值。

内存碎片化率:

内存碎片化率=redis向系统申请的内存除以(/)redis数据实际占用的内存

redis-cli info-memory | grep ratio 查看碎片化率

allocator frag ratio:1.33

分配器的碎片化比列,值越大,碎片越多,导致内存浪费

allocator rss ratio:6.79

分配器占用物理内存的比例

rss overhead ratio:0.93

表示占用物理内存的额外开销的比例,这个值越小越好,redis实际使用的物理内存比rss更接近

mem fragmentation ratio:12.81

内存的碎片比例,已经分配的内存,但是没有使用,这个值越低越好,内存利用率更高

 

配置文件取消注释自动清理碎片

手动清理 redis-cli memory purge(一般都是手动清理)


面试题:

redis常见的问题

缓存雪崩

redis产生了大面积的故障(缓存数据丢失),所有的请求全部转发到了数据库。

数据库不适合高并发,很快集群就会崩溃,然后整个系统瘫痪

产生的原因:

1、人为--------踩缝纫机

2、缓存数据大量的同时过期,新的缓存没有及时生产

3、redis服务集群崩溃

防范机制:

1、redis集群一定要做高可用方案

持久化 主从 哨兵 集群

2、访问量过大,超过redis本身的负载能力。

熔断机制 Hystrix 可以实现熔断,降级,限流来降低雪崩的概率。

缓存击穿

redis的缓存数据有一部分丢失了,导致请求转发到了数据库,或者是缓存刚刚过期,新缓存还没有简历,请求都转发到了数据库。

防范机制:

热点缓存数据设置为永不过期

持久化,高可用

我发现经常使用的热点语句,查询速度突然变的很慢,查找问题,发现改热点数据对应的缓存键值对消失了。

怎么解决:

简单回答:因为我没有redis的密码,我报告给了数据库的部门。

高级回答:我进入了redis的数据库set 重新创建了这个热点数据的缓存,解决了这个问题

缓存穿透

80%以上都是黑客攻击

利用缓存和数据库都没有的数据,用户一直在发起请求。

利用大量的请求压垮数据库,从而导致整个网站崩溃。

防范:

防火墙 只能起到一定的作用

验证拦截(消息队列)需要手动完成,可以判断是否是攻击行为。

缓存空的数据

把一些空数据也设置缓存,声明生命周期短一点,以防恶意攻击。


相关文章:

redis的高可用及性能管理和雪崩

redis的高可用 redis当中,高可用概念更宽泛一些。 除了正常服务以外,数据量的扩容,数据安全。 实现高可用的方式: 1、持久化 最简单的高可用方法,主要功能就是备份数据。 把内存当中的数据保存到硬盘当中。 2、主…...

php基础语法

文章目录 1. PHP(1) 安装php 2. 基础语法(1) 格式(2) 输出语法(3) 注释(4) 变量(无变量类型自动识别)(5) 输入获取(6) 定界符(7) 换行 3. 基本数据类型(1) 字符串(2) 整数(3). 浮点数(4). boolean类型(5). 数组(6). null值 4. 运算符(1) 算术运算符(2) 比较运算符(3) 逻辑运算符…...

js抓取短信验证码发送

油猴(Tampermonkey)是一个流行的浏览器扩展,它允许用户在浏览器中运行自定义的JavaScript脚本。下面是一个简单的示例脚本,用于收集网站上发送短信验证码的API请求,并以JSON格式存储这些信息。请注意,这个脚本需要根据实际网站的API请求进行调整,因为不同的网站可能有不…...

视频怎么加密?常见的四种视频加密方法和软件

视频加密是一种重要的技术手段,用于保护视频内容不被未经授权的用户获取、复制、修改或传播。在加密过程中,安企神软件作为一种专业的加密工具,可以发挥重要作用。 以下将详细介绍如何使用安企神软件对视频进行加密,并探讨视频加密…...

聚焦全局应用可用性的提升策略,详解GLSB是什么

伴随互联网的快速发展和全球化趋势的深入,企业对网络应用的需求日渐增长。为满足全球范围内用户大量的访问需求,同时解决容灾、用户就近访问以及全球应用交付等问题,GLSB(全局负载均衡)也因此应运而生。那么GLSB是什么…...

无水印下载视频2——基于tkinter完成头条视频的下载

在数字化时代的浪潮中,视频内容以其丰富性和便捷性,逐渐成为了我们获取信息和娱乐的重要途径。尤其是在短视频平台上,各种创意十足、内容精彩的视频层出不穷,更是吸引了数以亿计的用户。然而,随着视频内容的增加&#…...

Java学习Day17:基础篇7

继承 Java中的继承是面向对象编程中的一个核心概念,它允许我们定义一个类(称为子类或派生类)来继承另一个类(称为父类或基类)的属性和方法。继承提高了代码的复用性,使得我们不必从头开始编写所有的代码&a…...

Vue3 Pinia的创建与使用代替Vuex 全局数据共享 同步异步

介绍 提供跨组件和页面的共享状态能力,作为Vuex的替代品,专为Vue3设计的状态管理库。 Vuex:在Vuex中,更改状态必须通过Mutation或Action完成,手动触发更新。Pinia:Pinia的状态是响应式的,当状…...

手撕数据结构02--二分搜索(附源码)

一、理论基础 二分搜索,也称折半搜索、对数搜索,是一种在有序数组中查找某一特定元素的搜索算法。 二分搜索是一种高效的查找算法,适用于在已排序的数组中查找特定元素。它的基本思想是通过不断将搜索区间对半分割,从而快速缩小…...

单片机工程师继续从事硬件设计还是涉足 Linux 开发?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「linux的资料从专业入门到高级教程」,点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!! 怎么说呢,感觉绝…...

《昇思25天学习打卡营第25天|第28天》

今天是打卡的第二十八天,实践应用篇中的计算机视觉中Vision Transformer图像分类。 从Vision Transformer(ViT)简介开始了解,模型结构,模型特点,实验的环境准备和数据读取,模型解析&#xff08…...

Flutter Dio网络请求报错FormatException: Unexpected character

最近开发Flutter项目,网络请求采用的是Dio框架,在发起网络请求的时候报错: 网络请求返回的数据为: var returnCitySN {"cip": "127.0.0.1", "cid": "00", "cname": "未…...

关于@JsonSerialize序列化与@JsonDeserialize反序列化注解的使用(密码加密与解密举例)

注:另一种方式参考 关于TableField中TypeHandler属性,自定义的类型处理器的使用(密码加密与解密举例)http://t.csdnimg.cn/NZy4G 1.简介 1.1 序列化与反序列化 学习注解之前,我们可以先了解一下什么是序列化与反序列…...

第二届世界科学智能大赛逻辑推理赛道:复杂推理能力评估 #大模型技术之逻辑推理方向 #Datawhale #夏令营 <二>

第二届世界科学智能大赛逻辑推理赛道:复杂推理能力评估 #大模型技术之逻辑推理方向 #Datawhale #夏令营-CSDN博客 这里在上一篇的基础上,已经充分理解了一遍baseline的流程,并修复了一些后处理的问题,包括答案抽取,中间…...

C# 关于Linq延迟查询

demo: int Count 0;string[] obj { "item1", "item2", "item3", "item4", "item5", "item6" };var query obj.Where(item > IsTrue(item));// 第一次遍历foreach (var item in query){Console.WriteLine(it…...

Navicat For Mysql连接Mysql8.0报错:客户端不支持服务器请求的身份验证协议

windows通过navicat连接本地mysql时报错:Client does not support authentication protocol requested by server; consider upgrading MySQL client 一、问题原因二、解决方法1--失败1. 连接mysql客户端2. 修改加密方式3.正确的解决方法1.查找my.ini文件2.修改my.ini文件3.重…...

以西门子winCC为代表的组态界面,还是有很大提升空间的。

组态界面向来都是功能为主,美观和体验性为辅的,这也导致了国内的一些跟随者如法炮制,而且很多操作的工程师也是认可这重模式,不过现在一些新的组态软件可是支持精美的定制化界面,还有3D交互效果,这就是确实…...

HomeServer平台选择,介绍常用功能

​​ 平台选择 HomeServer 的性能要求不高,以下是我的硬件参数,可供参考: ‍ 硬件: 平台:旧笔记本CPU:i5 4210u内存 8G硬盘:128G 固态做系统盘,1T1T 机械盘组 RAID1 做存储。硬…...

记录一个k8s集群zookeeper部署过程

由于网管中心交维要求必须是支持高可用配置,原先单节点的zookeeper不被允许。所以在k8s集群中做了一个高可用版本的zookeeper。 期间有点小波折,官方给的镜像版本太老,业务不支持,所以手动做了下处理,重新打了一个镜像…...

TapData 信创数据源 | 国产信创数据库 TiDB 数据迁移指南,加速国产化进程,推进自主创新建设

随着国家对自主可控的日益重视,目前在各个行业和区域中面临越来越多的国产化,采用有自主知识产权的国产数据库正在成为主流。长期以来,作为拥有纯国产自研背景的 TapData,自是非常重视对于更多国产信创数据库的数据连接器支持&…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...