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

news2025/1/10 16:03:54

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%以上都是黑客攻击

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

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

防范:

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

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

缓存空的数据

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


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何有效增加谷歌外链?

想有效增加谷歌外链,其实还是要看你想要哪一种外链,但无论哪一种外链,都不能乱发,想有效的增加谷歌外链,看见明显的数据变化,这里只推荐三种外链,GPB,GNB,GMB 目前市面上最有效的外链…

负载驱动下的滚珠丝杆预压力优化策略!

滚珠丝杆的预紧力是指在未受到负载时,滚珠丝杆轴承内部的压力,主要是为了消除轴向后隙,‌减小轴向力引起的弹性位移,‌从而提高滚珠丝杆的刚度。‌这种预压机制通过独特的滚珠与珠槽接触模式实现,‌旨在增加系统的刚性…

物联网服务器搭建及部署详细说明:掌握 Node.js、MongoDB、Socket.IO 和 JWT 的实用指南

关键知识点目录 1. 环境准备 1.1 硬件要求 1.2 软件要求 2. 搭建步骤 3. 数据处理与存储 3.1 数据存储 3.2 数据实时处理 3.2.1 安装 Socket.IO 3.2.2 修改服务器代码 4. 安全性 4.1 身份验证与授权 4.2 加密通信 4.2.1 生成自签名证书(开发环境&#…

html必知必会-html内嵌JavaScript和文件路径

文章目录 HTML JavaScriptHTML <script> 标签JavaScript 的简单示例HTML <noscript> 标签HTML 文件路径绝对文件路径相对文件路径总结 HTML JavaScript JavaScript 使 HTML 页面更具动态性和交互性。 示例 <!DOCTYPE html> <html> <body><…

iOS18使用技巧:iPhone通话录音开启教程和注意事项

今日早些时候&#xff0c;苹果为iPhone 15 Pro系列的开发者预览版用户推送了iOS 18.1 Beta1测试版的更新&#xff0c;已经注册Apple Beta版软件计划的用户只需打开设置--通用--软件更新即可在线OTA升级至最新的iOS 18.1 Beta1测试版。 说起iOS 18.1最重磅的更新&#xff0c;莫过…

Redis7-入门-安装

1.Redis是什么 REmote Dictionary Server(远程字典服务器) Remote Dictionary Server(远程字典服务)是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高性能的Key-Value数据库提供了丰富的数据结构&#xff0c;例如String、Hash、List、set、Sorteds…

程序员学长 | 快速学会一个算法,ANN

本文来源公众号“程序员学长”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;快速学会一个算法&#xff0c;ANN 今天给大家分享一个强大的算法模型&#xff0c;ANN。 人工神经网络 (ANN) 是一种深度学习方法&#xff0c;源自人类…

【C++BFS】1020. 飞地的数量

本文涉及知识点 CBFS算法 LeetCode1020. 飞地的数量 给你一个大小为 m x n 的二进制矩阵 grid &#xff0c;其中 0 表示一个海洋单元格、1 表示一个陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相邻&#xff08;上、下、左、右&#xff09;的陆地单元格或跨过 gr…

html+css 炫酷的流边按钮

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽效果&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 文…

详细教程:在Octo Browser指纹浏览器中配置IPXProxy代理IP的步骤

​Octo Browser是一款反检测指纹浏览器&#xff0c;可防止在线跟踪并保护用户隐私的网络浏览器。用户可以在Octo Browser中设置代理IP&#xff0c;来进行多账户的管理&#xff0c;降低账户关联的风险。下面以IPXProxy代理IP为例&#xff0c;告诉大家如何在Octo Browser指纹浏览…

顺序栈*链栈

逻辑结构,存储结构,运算 栈的定义 栈是只能在一端进行插入,删除操作的线性表; 栈的操作特征为先进后出,栈的逻辑结果为线性结构,是一种特殊的线性表. 栈顶:允许插入,删除 栈底:不允许插入删除 存储结构--顺序存储 (1)定义 #include<stdio.h> #define MaxSize 10 /…

哪些洗地机比较好?揭晓中国十大名牌洗地机

在当今追求高效与品质生活的时代&#xff0c;洗地机作为现代家居清洁的得力助手&#xff0c;其重要性日益凸显。为了帮助大家在众多品牌中筛选出优质之选&#xff0c;我们精心揭晓中国洗地机领域的十大名牌。这些品牌凭借卓越的性能、创新的技术以及良好的用户口碑&#xff0c;…

开启mybatis-plus日志功能

第一部分&#xff1a;配置文件增添参数 增加如下&#xff1a; configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 第二部分&#xff1a;运行效果展示

大数据信用报告一般都是在哪里查询?

相信现在有不少人都听说过大数据信用&#xff0c;其实早在几年前&#xff0c;大数据就已经作为银行和借贷机构审核申贷人的重要途径&#xff0c;因为传统的征信报告有一定的局限性&#xff0c;无法全方位的了解申贷人的隐形负债&#xff0c;大数据信用报告的作用就显现出来了&a…

Ansys Zemax|如何模拟复杂的菲涅尔透镜

附件下载 联系工作人员获取附件 概述 这篇文章介绍了如何模拟每个菲涅尔环都由不同数据定义的复杂菲涅尔透镜。这种方法也可以用于定义复杂物体。 介绍 菲涅尔透镜与普通透镜有所区别&#xff0c;它是将普通透镜连续、光滑的表面分成一系列同心圆环&#xff0c;这些同心圆环…

手机高清录屏,快速学会的2种绝妙方法!

在移动互联时代&#xff0c;手机不仅仅是通讯工具&#xff0c;更是我们记录生活、分享经验、创作内容的得力助手。而手机高清录屏功能&#xff0c;则为我们捕捉手机屏幕上的每一帧精彩提供了便捷的方式。无论是游戏直播、教学演示&#xff0c;还是视频制作&#xff0c;手机高清…

创建自己的 Omnigraph (python篇)

Omnigraph 是 Nvidia Omniverse 中一个强大的视觉化脚本工具&#xff0c;它让开发者能够以直观和灵活的方式创建复杂的行为和交互性。通过结合 Action Graphs 和 Push Graphs&#xff0c;以及利用丰富的节点库&#xff0c;用户可以在 Omniverse 平台上构建出令人惊叹的虚拟世界…

Ubuntu虚拟机扩容笔记(各种方法都不行版)

1.背景介绍 最近需要对ubuntu的虚拟机下面的挂载根目录上的文件系统对应的硬盘进行扩容&#xff0c;在虚拟机管理平台对磁盘进行扩容后&#xff0c;在图形界面上尝试扩容&#xff1a; 尝试教程主要采用下面教程的第三种方法&#xff1a; Ubuntu22.04 Linux磁盘扩容/硬盘扩展…

【C++】学习笔记——C++11_1

文章目录 十九、C111. 统一的列表初始化{}初始化std::initializer_list 2. 声明autodecltypenullptr 4. 范围for5. STL中的一些变化新容器新方法 6. 右值引用和移动语句左值引用和右值引用 未完待续 十九、C11 1. 统一的列表初始化 {}初始化 在C98中&#xff0c;标准允许使用…

C++ map/set 函数用法解析

一 . set 1.1 set 是什么、关联/非关联式容器 se是一种关联式容器&#xff0c;主要用进行查找的工作。采用了key模型&#xff0c;判断数据在不在。不支持修改的操作。 序列式容器&#xff08;线性表&#xff09;&#xff1a;vector / list /deque&#xff08;单纯存储数据&am…