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

redis的性能管理、主从复制和哨兵模式

一、redis的性能管理

redis的数据时缓存在内存中的

查看系统内存情况

info memory

used_memory:853688 redis中数据占用的内存

used_memory_rss:10522624 redis向操作系统申请的内存

used_memory_peak:853688 redis使用内存的峰值

系统巡检:硬件巡检、数据库 nginx redis docker k8s等软件巡检

内存碎片率:used_memory_rss/used_memory=内存碎片率

系统已经分配给了redis,但是redis未能够有效利用的内存

查询比率:

redis-cli info memory | grep ratio

allocator_frag_ratio:1.26

分配器碎片的比例,redis的主进程调度时产生的内存。比例要越小越好,值越高说明内存的浪费越多

allocator_rss_ratio:4.54

分配器占用物理内存的比例,告诉你主进程调度执行时占用了多少物理内存

rss_overhead_ratio:1.36

RSS是向系统申请的内存空间,redis占用物理空间额外的开销比例,比例要越低越好,表示redis实际占用的内存和向系统申请的内存越接近,额外的开销越低

mem_fragmentation_ratio:15.16

内存碎片的比例,越低越好,内存的使用率越高,

清理碎片:

自动清理碎片:

vim /etc/redis/6379.conf

最后一行插入:

activedefrag yes

开启自动清理

要设置redis最大内存阀值

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

567行

设置占用最大内存

maxmemory 1gb

一定要设置占用内存的阀值

598行

设置开启key的回收机制:

key回收策略:

maxmemory-policy volatile-lru

使用redis内置的LRU算法,把已经设置了过期时间的键值对中淘汰数据,移除最近最少使用的键值对(只是针对设置过期时间的键值对)

maxmemory-policy volatile-ttl

已经设置了过期时间的键值对,从当中挑选一个即将过期的键值对(针对有设置过期时间的键值对)

maxmemory-policy volatile-random

从已经设置的过期的键值对当中,挑选数据随机淘汰键值对(对设置了过期时间的键值对进行随意移除)

allkeys-lru

根据LRU算法当中,对所有的键值对进行淘汰,移除最少使用的键值对(针对所有的键值对)

allkeys-random

从所有键值对中,任意选项数据进行淘汰

maxmemory-policy noeviction

键值键值对回收(不删除任何键值对,知道redis把内存塞满,写不了了,报错为止)

在工作中一定要给redis占用内存设置阀值

手动配置:

redis-cli memory purge

工作中reids占用内存效率问题如何处理:

1、日常巡检中,对redis的占用情况做监控

2、设置redis占用系统内存的阀值,避免占用系统全部内存

3、内存碎片清理,手动和自动清理

4、配置合适的key回收机制

redis雪崩:

也是缓存雪崩:大量的应用请求无法在redis缓存中处理,请求会全部发送到后台数据库,

数据库本身并发能力就差,一旦高并发,数据库会很快崩溃

导致雪崩的原因:

redis集群大面积故障

redi缓存中,大量数据同时过期,大量的请求无法得到处理

redis实例宕机。

解决方法:

事前:高可用架构,防止整个缓存故障。只从复制和哨兵模式。redis集群

事中:在国内用的比较多的方式:HySTRIX,熔断,降级,限流三个手段来降低雪崩发生过后的损失

事后:redis备份。快速缓存预热

redis的缓存击穿:

导致原因:

主要是热点数据缓存过期,或者被删除,多个请求并发访问热点数据,请求也是转发到数据库,导致数据库的性能快速下降

经常被请求的缓存数据,最好设置为永不过期

redis缓存穿透:

缓存中没有数据,数据库也诶呦对应数据,但是有用户一直在发起这个都没有的请求,而且请求的数据格式很大。一般是黑客再利用漏洞攻击,以压垮应用数据库

键值对还在,但是值被替换了,原有的请求找不到之后,同样也会去请求后台的数据库,也是击穿的一种

redis的集群

高可用方案:

  1. 持久化
  2. 高可用 主从复制 哨兵模式 集群

主从复制时redis实现高可用的基础,哨兵模式和集群都是在主从复制的基础上实现高可用的

主从复制实现数据的多级备份,以及读写分离(主负责写,从负责读)

缺点:故障无法自动恢复。需要人工干预,写操作无法实现负载均衡

主从复制的工作原理:

  1. 主节点 master 从节点slave组成,数据的复制时单向的,只能从主节点到从节点

架构配置:

主从复制:

主 20.0.0.41

从1  20.0.0.42

从2 20.0.0.43

关防火墙和安全机制

修改master节点的配置文件 

vim /etc/redis/6379.conf

 bind 0.0.0.0                      #70行,修改监听地址为0.0.0.0(生产环境中,尤其是多网卡最好填写物理网卡的IP)

 daemonize yes                     #137行,开启守护进程,后台启动

 logfile /var/log/redis_6379.log   #172行,指定日志文件存放目录

 dir /var/lib/redis/6379           #264行,指定工作目录

 appendonly yes                    #700行,开启AOF持久化功能

/etc/init.d/redis_6379 restart     #重启redis服务

改两个slave节点的配置文件 

#修改slave1的配置文件

vim /etc/redis/6379.conf

 bind 0.0.0.0                        #70行,修改监听地址为0.0.0.0(生产环境中需要填写物理网卡的IP)

 daemonize yes                       #137行,开启守护进程,后台启动

 logfile /var/log/redis_6379.log     #172行,指定日志文件目录

 dir /var/lib/redis/6379             #264行,指定工作目录

 replicaof 20.0.0.41 6379       #288行,指定要同步的Master节点的IP和端口

 appendonly yes                      #700行,修改为yes,开启AOF持久化功能

/etc/init.d/redis_6379 restart  #重启redis

netstat -natp | grep redis      #查看主从服务器是否已建立连接

tail -f /var/log/redis_6379.log

实验测试:

主节点创建数据,从节点是否同步

只有主节点能读写,从节点只能读

查看主从状态信息:

redis-cli info replication

哨兵模式:

先有主从然后再有哨兵,在主从复制的基础只上,实现主节点故障的自动切换。

哨兵模式的原理:

是一个分布式系统,每个节点上都有哨兵,用于在主从结构之间,对每台redis服务进行服务监控

主节点出现故障时,从节点通过投票的方式选择一个新的master

哨兵模式也需要至少三个节点

哨兵模式的结构:
哨兵节点:监控,不存储任何数据

数据节点:主节点和从节点,都是数据节点

redis工作机制:
哨兵监控的是redis的节点,不是监控哨兵

每个哨兵每隔一秒,通过ping命令的方式,检测主从之间的心跳线

主节点在一定时间内没有回复,或则回复了错误消息。这个时候,哨兵会主观的任务主节点下线了。如果有超过半数的哨兵节点认为主节点下线了,在个时候才会认为主节点是客观下线

哨兵节点通过raft算法(选举算法),每个节点共同投票,选举出一个新的master。然后新的master,来实现主节点的转义和故障恢复通知

主节点选举的过程:

  1. 已经下线的从节点,不会被选为主节点
  2. 选择配置微文件中,从节点优先级最高的,replica-priority 100
  3. 选择一个复制数据最完整的从节点

哨兵模式,源码包里自带

主从配置方式一致:

vim /opt/redis-5.0.7/sentinel.conf

17行
protected-mode no

取消注释

关闭保护模式

21行

哨兵模式默认端口

26行

指定哨兵模式是否后台运行 改成yes

36行

是日志文件

65行

设置工作目录:

84行

指定初始的主服务器

这里的2表示至少需要2台服务器认为主已经下线,才会进行主从切换

 113行

判断服务器宕掉的服务周期

146行

故障节点的最大超时时间

配置完之后

重启服务

要先启master 再启slave

都在redis原码包目录下启动的

要在reids原码包目录下,启动

redis-sentinel sentinel.conf &

监控哨兵集群

查看整个集群的哨兵情况:

redis-cli -p 26379 info Sentinel

模拟故障:

先杀进程或暂停节点

然后投票选举一个master

测试结果,新master创建数据,slave同步数据

故障恢复,重启源master服务器

相关文章:

redis的性能管理、主从复制和哨兵模式

一、redis的性能管理 redis的数据时缓存在内存中的 查看系统内存情况 info memory used_memory:853688 redis中数据占用的内存 used_memory_rss:10522624 redis向操作系统申请的内存 used_memory_peak:853688 redis使用内存的峰值 系统巡检:硬件巡检、数据库 n…...

排序算法:归并排序、快速排序、堆排序

归并排序 要将一个数组排序,可以先将它分成两半分别排序,然后再将结果合并(归并)起来。这里的分成的两半,每部分可以使用其他排序算法,也可以仍然使用归并排序(递归)。 我看《算法》…...

Redis 面试题——持久化

目录 1.概述1.1.Redis 的持久化功能是指什么?1.2.Redis 有哪些持久化机制? 2.RDB2.1.什么是 RDB 持久化?2.2.Redis 中使用什么命令来生成 RDB 快照文件?2.3.如何在 Redis 的配置文件中对 RDB 进行配置?2.4.✨RDB 持久化…...

Linux使用固定ip地址

设置静态ip,我们就需要修改 /etc/sysconfig/network-scripts/ifcfg-ens33 配置文件。 vim /etc/sysconfig/network-scripts/ifcfg-ens33 //进入网卡ens33的配置页面 (1) 将 BOOTPROTO dhcp 改成 BOOTPROTO static 也就是将动态ip,改成静态i…...

ESP Multi-Room Music 方案:支持音频实时同步播放 实现音乐互联共享

项目背景 随着无线通信技术的发展,针对不同音频应用领域的无线音频产品正不断涌现。近日,乐鑫科技推出了基于 Wi-Fi 的多扬声器互联共享音乐通信协议——ESP Multi-Room Music 方案。该方案使用乐鑫自研的基于 Wi-Fi 局域网的音频同步播放技术&#xff…...

java分布式锁分布式锁

java分布式&锁&分布式锁 锁 锁的作用:有限资源的情况下,控制同一时间段,只有某些线程(用户/服务器)能访问到资源。 锁在java中的实现: synchronized关键字并发包的类 缺点:只对单个的…...

2. 流程控制|方法|数组|二维数组|递归

文章目录 流程控制代码块选择结构循环结构跳转控制关键字 方法方法的概述方法的重载Junit单元测试初识全限定类名 Debug 小技巧数组数组的基本概念数组的基本使用数组的声明数组的初始化 JVM内存模型什么是引用数据类型基本数据类型和引用数据类型的区别堆和栈中内容的区别 数组…...

22. 自动装配有哪些限制(需要注意)?

自动装配有哪些限制(需要注意)&#xff1f; 一定要声明set方法覆盖&#xff1a; 你仍可以用 < constructor-arg >和 < property > 配置来定义依赖&#xff0c;这些配置将始终覆盖自动注入。基本数据类型&#xff1a;不能自动装配简单的属性&#xff0c;如基本数据…...

14 网关实战:网关聚合API文档

上节课介绍了网关层的认证鉴权,今天这节介绍一下网关层如何聚合API接口文文档。 为什么需要聚合API接口文档? 大型微服务系统模块众多,木谷博客系统就有9个,如果这些服务的接口地址没有一个统一,那么客户端将要保存每个服务的接口地址,这个肯定是不现实。 先来看一下A…...

css 固定按钮到页面顶部或者底部的实现方式

实现方式 要将按钮固定到顶部或底部&#xff0c;可以使用CSS的定位属性来实现。下面是一种常用的方法&#xff1a; 创建一个包含按钮的HTML元素&#xff0c;例如一个<div>元素。确保给它添加一个唯一的id&#xff0c;以便在CSS中进行定位。 <div id"myButton&qu…...

【Java Spring】SpringBoot常用插件

文章目录 1、Lombok1.1 IDEA社区版安装Lombok1.2 IDEA专业版安装Lombok1.3 Lombok的基本使用 2、EditStarters2.1 IDEA安装EditStarters2.2 EditStarters基本使用方法 1、Lombok 是简化Java开发的一个必要工具&#xff0c;lombok的原理是编译过程中将lombok的注解给去掉并翻译…...

GPT还远远不是真正的智能

GPT是一个基于深度学习的自然语言处理模型&#xff0c;它可以生成逼真的文本。虽然GPT在生成文本方面取得了显著的进展&#xff0c;但它并不具备真正的智能。GPT是通过训练模型来学习语言模式&#xff0c;它不具备理解、推理、判断和主动学习的能力。它只是根据已有的语料库生成…...

计算机网络:网络层

0 本节主要内容 问题描述 解决思路 1 问题描述 两大问题&#xff08;重点&#xff0c;也是难点&#xff09;&#xff1a; 地址管理&#xff1b;路由选择。 1.1 子问题1&#xff1a;地址管理 网络上的这些主机和节点都需要使用一种规则来区分&#xff0c;就相当于是一种身…...

消息队列进阶-1.消息队列的应用场景与选型

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44…...

浅谈堆和栈内存以及编程语言

浅谈堆和栈内存以及编程语言 栈和堆C 和 C# 的区别&#xff1a;C#总结 编程语言C汇编语言&#xff08;Assembly Language&#xff09;&#xff1a;机器语言&#xff08;Machine Language&#xff09;&#xff1a; 拓展C#依赖注入&#xff08;Dependency Injection&#xff09;模…...

SpringBootWeb案例_01

Web后端开发_04 SpringBootWeb案例_01 原型展示 成品展示 准备工作 需求&环境搭建 需求说明&#xff1a; 完成tlias智能学习辅助系统的部门管理&#xff0c;员工管理 环境搭建 准备数据库表&#xff08;dept、emp&#xff09;创建springboot工程&#xff0c;引入对应…...

C语言数据结构-----栈和队列练习题(分析+代码)

前言 前面的博客写了如何实现栈和队列&#xff0c;下来我们来看一下队列和栈的相关习题。 链接: 栈和队列的实现 文章目录 前言1.用栈实现括号匹配2.用队列实现栈3.用栈实现队列4.设计循环队列 1.用栈实现括号匹配 此题最重要的就是数量匹配和顺序匹配。 用栈可以完美的做到…...

uniapp基础-教程之HBuilderX配置篇-01

uniapp教程之HBuilderX配置篇-01 为什么要做这个教程的梳理&#xff0c;主要用于自己学习和总结&#xff0c;利于增加自己的积累和记忆。首先下载HBuilderX&#xff0c;并保证你的软件在C盘进行运行&#xff0c;最好使用英文或者拼音&#xff0c;这个操作是为了保证软件的稳定…...

【备忘录】快速回忆ElasticSearch的CRUD

导引——第一条ElasticSearch语句 测试分词器 POST /_analyze {"text":"黑马程序员学习java太棒了","analyzer": "ik_smart" }概念 语法规则 HTTP_METHOD /index/_action/IDHTTP_METHOD 是 HTTP 请求的方法&#xff0c;常见的包括…...

影响PPC广告成本预算的因素,如何计算亚马逊PPC广告预算——站斧浏览器

亚马逊PPC&#xff0c;又称按点击付费(Pay Per Click)&#xff0c;是一种只有用户点击你的广告时才会向你收费的模式。那么影响PPC广告成本预算的因素,如何计算亚马逊PPC广告预算&#xff1f; 影响PPC广告成本预算的因素 1、产品类别&#xff1a;不同类别的产品竞争程度不同&…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

【WebSocket】SpringBoot项目中使用WebSocket

1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖&#xff0c;添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...

【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解

一、前言 在HarmonyOS 5的应用开发模型中&#xff0c;featureAbility是旧版FA模型&#xff08;Feature Ability&#xff09;的用法&#xff0c;Stage模型已采用全新的应用架构&#xff0c;推荐使用组件化的上下文获取方式&#xff0c;而非依赖featureAbility。 FA大概是API7之…...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL&#xff1a;在浏览器中解锁3D世界的魔法钥匙 引言&#xff1a;网页的边界正在消失 在数字化浪潮的推动下&#xff0c;网页早已不再是静态信息的展示窗口。如今&#xff0c;我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室&#xff0c;甚至沉浸式的V…...

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space

问题&#xff1a;IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案&#xff1a;将编译的堆内存增加一点 位置&#xff1a;设置setting-》构建菜单build-》编译器Complier...