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)简介开始了解,模型结构,模型特点,实验的环境准备和数据读取,模型解析(…...
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,自是非常重视对于更多国产信创数据库的数据连接器支持&…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
