redis的性能管理及集群架构(主从复制、哨兵模式)
一、redis的性能管理
1、内存指标info memory

| 内存指标(重要) | |
| used_memory:853736 | 数据占用的内存 |
| used_memory_rss:10551296 | redis向操作系统申请的内存 |
| used_memory_peak:853736 | redis使用内存的峰值 |
| 注:单位:字节 | |
系统巡检:硬件巡检、数据库、中间件(nginx、redis)、docker、k8s
2、内存碎片率
(1)定义:系统已分配给redis,但reids未能有效利用的内存
(2)计算格式:内存碎片率=used_memory_rss/used_memory
(3)监控指标redis-cli info memory|grep ratio(生产环境常用)

| 监控指标 | 定义 | |
| allocator_frag_ratio:1.29 | 分配器碎片的比例 (越小越好,值越高,内存浪费越多) | redis主进程调度时产生的内存 |
| allocator_rss_ratio:5.49 | 分配器占用物理内存的比例 | 主进程调度时占用的物理内存 |
| rss_overhead_ratio:1.38 | redis占用物理空间额外的开销比例(比例越低越好,redis实际占用的物理内存和向系统申请的内存越接近,额外的开销越低) | RSS是redis向系统申请的内存空间 |
| mem_fragmentation_ratio:15.59 | 内存碎片率 (越低越好,内存使用率越高) | |
3、清理内存的两种方式
(1)自动清理碎片vim /etc/redis/6379.conf
末尾添加activedefrag yes自动清理碎片的配置

(2)手动清理碎片redis-cli memory purge

4、设置redis的最大内存阀值
(在工作中一定要设置redis的占用内存阈值。若不设置阈值,会塞满内存,直到炸)
(1)先设置最大内存阀值vim /etc/redis/6379.conf
添加maxmemory 1gb

一旦达到阀值,会自动清理碎片,开启key的回收机制
(2)再开启key的回收机制

| key的回收机制 | |
| maxmemory-policy volatile-lru (常用) | 使用redis内置的lru算法,在已设置过期时间的键值对中淘汰数据中,移除最近最少使用的键值对 |
| maxmemory-policy volatile-ttl (常用) | 使用redis内置的ttl算法,在已设置过期时间的键值对中挑选一个即将过期的键值对 |
| maxmemory-policy volatile-random (少用) | 在已设置过期时间的键值对中,挑选数据,随机淘汰键值对 |
| 注:以上算法只针对已设置过期时间的键值对,永不过期的不在此范围内 | |
| allkeys-lru | 使用redis内置的lru算法,对所有的键值对进行淘汰,移除最少使用的键值对 |
| allkeys-random (更少用) | 在所有键值对中任意选择数据进行淘汰 |
| 注:以上算法针对所有的键值对,无论是否设置过期时间 | |
| maxmemory-policy noeviction (最常用) | 禁止键值对回收(不删除任何键值对,直到redis把内存塞满,写满报错为止) |
【面试题】redis占用内存的效率问题如何解决?(经验)
①日常巡检中,监控redis的占用情况
②设置redis占用系统内存的阀值,避免占用系统全部内存
③手动/自动清理内存碎片
④配置合适的key回收机制
5、redis雪崩(缓存雪崩)(少见)
(1)定义
大量的应用请求无法在redis缓存中处理,请求会全部发送到后台数据库,数据库并发能力本身就差,一旦高并发,数据库很快会崩溃
(2)产生雪崩的原因
①redis集群大面积故障
②在redis缓存中,大量数据同时过期,大量的请求无法得到处理
③redis实例宕机
(3)解决雪崩的方式
①事前预防:采用高可用架构(主从复制、哨兵模式、redis集群),防止整个缓存故障
②事中处理(开发):在国内通用方式——HySTRIX(熔断、降级、限流),降低雪崩发生后的损失,确保数据库不死,可以慢,但不能没有响应
③事后解决:以redis备份的方式恢复数据(运维)或快速缓存预热(开发)
6、redis的缓存击穿(重点)
(1)产生原因
①热点数据缓存过期或被删除,当多个请求并发访问热点数据时,请求转发到数据库,导致数据库性能快速下降。经常被请求的缓存数据最好设置为永不过期
②键值对还在,但值被替换,原有的请求找不到之后,同样会请求后台数据库,导致数据库性能快速下降
(2)解决方式
①热点数据设置成永不过期
②恢复原有的值
7、redis的缓存穿透(恶意攻击)(很少见)
(1)定义
缓存中没有数据,数据库也没有相应的数据,但有用户一直在发起这个都没有的请求,而且请求的数据格式很大。这种情况一般是黑客利用漏洞攻击,压垮应用数据库
(2)解决方式:专门的安全人员处理
二、redis的集群架构
1、高可用方案
(1)主从复制
(2)哨兵模式
(3)redis集群
2、主从复制
(1)主从复制是redis实现高可用的基础,哨兵模式和集群都是在主从复制的基础上实现高可用
(2)主从复制实现数据的多机备份和读写分离(主服务器——写,从服务器——读)
缺点:故障无法自动恢复,需人工干预,无法实现写操作的负载均衡
3、主从复制的工作原理
由主节点master和从节点slave组成,数据复制是单向的,只能从主节点到从节点

4、哨兵模式
在主从复制的基础上实现主节点故障的自动切换
(1)哨兵模式定义
哨兵是一个分布式系统,用于在主从结构之间,对每台redis服务进行监控。主节点出现故障时,从节点通过投票的方式选择一个新的master
哨兵模式也需要至少三个节点
(2)哨兵模式的结构
①哨兵节点:监控主、从节点,不存储数据
②数据节点:主节点和从节点,都是数据节点
(哨兵1监控从1,从2节点;哨兵2监控主节点,从2 节点;哨兵3监控主节点,从1节点)

(2)哨兵模式工作原理
每个哨兵节点每隔一秒,通过ping命令方式,检测主、从之间的心跳线,主节点在一定时间内没有回复或回复了错误消息,这个时候哨兵会主观认为主节点下线了;超过半数的哨兵节点认为主节点下线了,这个时候才会认为主节点是客观下线
故障恢复可能会有延迟,因为有一个选举过程
(4)如何选举新的主节点
哨兵节点通过raft算法(选举算法),每个节点共同投票选举出一个新的master,然后新的master实现主节点的转移和故障恢复通知
(5)主节点的选举过程
①已下线的从节点不会被选为主节点
②选择配置文件中从节点优先级最高的replica-priority 100
③自动选择一个复制数据最完整的从节点
三、主从复制+哨兵模式实验
基于主从复制做哨兵模式实验
实验目的:解决redis单节点故障问题
实验条件:
| IP地址 | 作用 | 组件 |
| 20.0.0.14 | 主服务器 | redis服务 |
| 20.0.0.24 | 从服务器1 | redis服务 |
| 20.0.0.34 | 从服务器2 | redis服务 |
实验步骤:
1、主从复制实验
(1)配置主服务器


(2)配置从服务器
从1



从2



replicaof 20.0.0.14 6379表示只读(20.0.0.14是主服务器的IP地址)
主从复制完成
(3)测试



2、哨兵模式实验

(1)配置主服务器


这个2:一般设置成集群的一半

最小切换时间30秒

最大切换时间180秒
(2)配置从服务器
从1





从2(与从1同样的配置)




(3)启动主从服务器(先启动主再启动从)
redis-sentinel sentinel.conf &



监控哨兵集群的信息redis-cli -p 26379 info Sentinel

哨兵模式搭建完毕
查看从节点信息tail -f /var/log/sentinel.log


(4)故障切换
模拟故障

看日志是否主从切换,有延迟
tail -f /var/log/sentinel.log


目前,新主的IP地址是20.0.0.34
(5)测试
①测试新主能不能写
能


恢复原主


②测试原主能否继续写
不能

原因:配置文件/etc/redis/6379.conf发生变化
原主(现从2)

从1

原从2(新主)

相关文章:
redis的性能管理及集群架构(主从复制、哨兵模式)
一、redis的性能管理 1、内存指标info memory 内存指标(重要) used_memory:853736 数据占用的内存 used_memory_rss:10551296 redis向操作系统申请的内存 used_memory_peak:853736 redis使用内存的峰值 注:单位:字节 系…...
【自然语言处理】正向最大匹配算法(FMM),反向最大匹配算法(BMM)和双向最大匹配算法(BM)原理及实现
目录 一,正向最大匹配算法(FMM) 二,反向最大匹配算法(RMM) 一,正向最大匹配算法(FMM) 正向最大匹配分词(Forward maximum matching segmentation)通常简称为…...
数据结构 | 堆排序
数据结构 | 堆排序 文章目录 数据结构 | 堆排序建立大堆排序结果以及全部代码 如果没有看过堆的实现的话可以先看前面的一章堆的实现,然后再来看这个堆排序,都是比较简单的~~ 这里堆排序首先建堆,建堆是要建小堆还是大堆呢? 在堆排…...
编程语言发展史:Go语言的设计和特点
一、前言 Go语言是一种由Google开发的编程语言,于2007年开始设计,2009年首次发布。Go语言是一种面向对象、静态类型、编译型的语言,具有高效、简单、安全等特点,可用于开发各种类型的应用程序。Go语言的设计和特点使其成为越来越…...
FinGPT:金融垂类大模型架构
Overview 动机 架构 底座模型: Llama2Chatglm2 Lora训练 技术路径 自动收集数据并整理 指令微调 舆情分析 搜新闻然后相似搜索 检索增强架构 智能投顾 Hugging face 地址 学术成果及未来方向 参考资料...
24. 深度学习进阶 - 矩阵运算的维度和激活函数
Hi,你好。我是茶桁。 咱们经过前一轮的学习,已经完成了一个小型的神经网络框架。但是这也只是个开始而已,在之后的课程中,针对深度学习我们需要进阶学习。 我们要学到超参数,优化器,卷积神经网络等等。看…...
杰发科技AC7801——keil工程移植到IAR
0、简介 发现AC7801的代码只有keil工程的,IAR和Eclipse的代码只有一个例程,于是在从Keil移植到IAR时候遇到的问题记录下。 正常情况下,直接把keil的usr用户代码移植到iar的文件夹下面,删除原本的文件再添加新加进来的文件即可。…...
Word怎么看字数?简单教程分享!
“我在写文章时,总是想看看写了多少字。但是我发现我的Word无法看到字数。在Word中应该怎么查看字数呢?请帮帮我!” Word是一个广泛使用的文档编辑工具。在我们编辑文章时,如果想查看写了多少字,也是可以轻松完成的。 …...
万字解析设计模式之观察者模式、中介者模式、访问者模式
一、观察者模式 1.1概述 观察者模式是一种行为型设计模式,它允许一个对象(称为主题或可观察者)在其状态发生改变时,通知它的所有依赖对象(称为观察者)并自动更新它们。这种模式提供了一种松耦合的方式&…...
【MySQL | TCP】宝塔面板结合内网穿透实现公网远程访问
文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置&#x…...
Python break用法详解
Python 语言没有提供 goto 语句来控制程序的跳转,这种做法虽然提高了程序流程控制的可读性,但降低了灵活性。为了弥补这种不足,Python 提供了 continue 和 break 来控制循环结构。本节先讲解 break 的用法。 某些时候,需要在某种…...
【C++初阶】STL详解(五)List的介绍与使用
本专栏内容为:C学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库&…...
MySQL特点和基本语句
MySQL MySQL是一种流行的关系型数据库管理系统,由瑞典MySQL AB公司开发,现属于甲骨文公司(Oracle)旗下产品。MySQL是基于C语言开发的,它具有高性能、可扩展性、易用性等特点,并且支持大量的用户访问。 My…...
Gin 学习笔记03-参数绑定
参数绑定 1、ShouldBindJSON2、ShouldBindQuery3、ShouldBindUri4、ShouldBind 1、ShouldBindJSON package mainimport ("github.com/gin-gonic/gin""net/http" )type User struct {Name string json:"name"Gender string json:"gender&…...
【100天精通Python】Day73:python机器学习入门算法详解与代码示例
目录 1. 监督学习算法: 1.1 线性回归(Linear Regression): 1.2 逻辑回归(Logistic Regression): 1.3 决策树(Decision Tree): 1.4 支持向量机ÿ…...
Node.js入门指南(四)
目录 express框架 express介绍 express使用 express路由 express 响应设置 中间件 路由模块化 EJS 模板引擎 express-generator hello,大家好!上一篇文章我们介绍了Node.js的模块化以及包管理工具等知识,这篇文章主要给大家分享Nod…...
Java LeetCode篇-深入了解关于数组的经典解法
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 轮转数组 1.1 使用移位的方式 1.2 使用三次数组逆转法 2.0 消失的数字 2.1 使用相减法 2.2 使用异或的方式 3.0 合并两个有序数组 3.1 使用三指针方式 3.2 使用合…...
LeeCode前端算法基础100题(4)- 无重复字符的最长子串
一、问题详情: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: 输入: s "bbbbb…...
Axios简单使用与配置安装-Vue
安装Axios npm i axios main.js 导入 import Axios from axios Vue.prototype.$axios Axios简单发送请求 get getTest() {this.$axios({method: GET,url: https://apis.jxcxin.cn/api/title?urlhttps://apis.jxcxin.cn/}).then(res > {//请求成功回调console.log(res)}…...
【初始前后端交互+原生Ajax+Fetch+axios+同源策略+解决跨域】
初始前后端交互原生AjaxFetchaxios同源策略解决跨域 1 初识前后端交互2 原生Ajax2.1 Ajax基础2.2 Ajax案例2.3 ajax请求方式 3 Fetch3.1 fetch基础3.2 fetch案例 4 axios4.1 axios基础4.2 axios使用4.2.1 axios拦截器4.2.2 axios中断器 5 同源策略6 解决跨域6.1 jsonp6.2 其他技…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
