Redis的使用场景、持久化方式和集群模式

1. Redis的使用场景

  1. 热点数据的缓存

热点数据:频繁读取的数据

  1. 限时任务的操作。比如短信验证码

  2. 完成session共享的问题。因为前后端分离

  3. 完成分布式锁

  4. 商品的销售量

2. Redis的持久化方式

2.1 什么是持久化

把内存中的数据存储到磁盘的过程。同时也可以把磁盘中的数据加载到内存中。

在这里插入图片描述

2.2 实现持久化的方式

Redis实现持久化的方式提供了两种:

  1. RDB[Redis Database]:快照模式
  2. AOF[append only file]:日志追加模式

2.2.1 RDB快照模式

2.2.1.1 什么是RDB

RDB快照模式:每隔一段时间对内存中的数据进行快照存储。默认启用该模式

2.2.1.2 什么时候会触发RDB模式

RDB快照模式的触发方式有两种:

  1. 手动触发:通过save或bgsave【redis中唯一的多线程】命令
  2. 自动触发:通过修改配置文件
  • 手动触发:save或bgsave手动触发RDB。保存的文件名称:dump.rdb

    • save命令: 接收到save命令的redis服务在快照创建完毕之前将不再响应其他的命令。

    save:该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。

    具体流程:

    在这里插入图片描述

    执行完成时,如果存在老的RDB文件,就把新的替换掉旧的。我们的客户端可能都是几万或者是几十万,这种方式不可取

    • bgsave命令:BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。

      执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求

      具体流程:

      在这里插入图片描述

      bgsave在执行该命令时会fork出一个新的线程,单独执行rdb持久化操作,而不影响其他客户对redis服务的操作。【唯一的多线程

      虽然 BGSAVE 子进程写入 RDB 的工作不会阻塞主线程,但是会对机器的 CPU资源和内存资源造成影响,严重的情况下甚至会导致服务器宕机。

  • 自动触发:通过配置文件搞定

    需要修改配置文件

    在这里插入图片描述

2.2.2 AOF日志追加模式

2.2.2.1 什么是AOF日志追加模式

AOF:append only file 日志追加模式【每执行一次写操作就要追加一次】,默认redis没有开启该模式,手动开启。默认的文件名:appendonly.aof

写操作:增删改

读操作:查

在这里插入图片描述

2.2.2.2 开启AOF

把配置文件中的appendonly yes即可

当启动redis服务器,会把日志文件中的命令从上到下执行以下

2.2.3 RDB和AOF的区别

  1. RDB快照模式,数据备份和回复速度快。缺点:数据完整性差。数据可能丢失多
  2. AOF日志追加模式,数据完整性高。缺点:数据备份和恢复速度慢

若RDB和AOF同时开启,先执行AOF

3. Redis的集群模式

集群:将一个项目部署到多个服务器上,分摊压力

redis提供了三种集群模式

  1. 主从模式。版本3以下
  2. 哨兵模式。版本5以下
  3. 去中心化模式

3.1 为什么使用redis集群

提高并发量,提高可用性

3.2 主从模式

redis主从模式表示一个主节点和若干个从节点。

主节点:负责读、写操作

从节点:只负责读操作

主节点的数据会自动同步到所有的从节点上【冗余换高效】

如何搭建redis主从模式

在这里插入图片描述

我们为了操作方便,在一台linux三跑三个redis服务器。只要端口不同即可

修改配置文件

1.端口号
2.dump文件的名称
3.aof的名称

开启三台Redsi服务器

reids-server redisXXX.conf

在这里插入图片描述

配置主从关系

配从不配主原则

slaveof 主节点IP 主节点port

查看主从的状态

info replication

在这里插入图片描述

思考

  1. 如果某台slave宕机,如果恢复后,是否具有master新增的数据?

    若子节点杀死重启,状态会为master,需重新更改为slave。但会保存死之前的数据,不会更新死之后master新增的数据

  2. master宕机后,slave会不会自动选举成为主节点?

    若主节点杀死,从节点仍可读,主节点重启,从节点中主节点状态变为up。不会推荐新的主节点,需要手动恢复主节点

发现主从模式的缺点:不会自动选举master节点。导致一旦主节点宕机,无法进行写操作

3.3 哨兵模式

为了解决主从模式的缺陷:当主节点宕机后,从节点无法直接上位

Sentinel(哨兵)进程的作用:

  • 监控redis集群中Master主服务器工作的状态
  • 在Master主服务器发生故障时,可以实现Master和Slave服务器的切换,保证系统的高可用(HA)

在这里插入图片描述

3.3.1 监控功能

  1. 每个Sentinel(哨兵)进程以每秒钟一次的频率向整个集群中的Master主服务器,Slave从服务器以及其他Sentinel(哨兵)进程发送一个 PING 命令
  2. 如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值,则这个实例会被 Sentinel(哨兵)进程标记为主观下线(SDOWN)。
  3. 如果一个Master主服务器被标记为主观下线(SDOWN),则正在监视这个Master主服务器的所有Sentinel(哨兵)进程要以每秒一次的频率确认Master主服务器的确进入了主观下线状态。
  4. 有足够数量的 Sentinel(哨兵)进程(大于等于配置文件指定的值)在指定的时间范围内确认Master主服务器进入了主观下线状态(SDOWN), 则Master主服务器会被标记为客观下线(ODOWN)。
  5. 在一般情况下, 每个Sentinel(哨兵)进程会以每 10 秒一次的频率向集群中的所有Master主服务器、Slave从服务器发送 INFO 命令。
  6. 当Master主服务器被 Sentinel(哨兵)进程标记为客观下线(ODOWN)时,Sentinel(哨兵)进程向下线的 Master主服务器的所有 Slave从服务器发送 INFO 命令的频率从 10 秒一次改为每秒一次
  7. 若没有足够数量的 Sentinel(哨兵)进程同意 Master主服务器下线, Master主服务器的客观下线状态就会被移除。若 Master主服务器重新向 Sentinel(哨兵)进程发送 PING 命令返回有效回复,Master主服务器的主观下线状态就会被移除。

搭建sentinel服务时,尽量搭建奇数个

3.3.2 选举机制

  1. 筛选条件

不仅仅要判断从库当前的状态,还要判断他之前的网络连接状态。如果之前从库跟主库断联次数超过了阈值,那么有理由确认这个从库的网络连接状态不是很好,可以把它筛选掉。虽然现在他在运行,但是万一过一会断掉了,就需要重新选主,所以需要判断她之前的状态。

具体怎么判断呢?

使用配置项down-after-milliseconds*10。其中,down-after-milliseconds是我们认定是从库断联的最大时间。如果在down-after-milliseconds毫秒内,主从节点都没有网络连接上,那么就认为从库断联了。如果断联时间超过了10次就认为,这个从库的网络转态不是很好不适合做主库

  1. 打分规则

可以分别按照三个规则进行打分:从库优先级从库复制进度、以及从库ID号

只需要在某一轮得分最高,那么他就是新主库,选主过程到此结束,要是没有出现得分最高的,那么就进行下一轮。

轮:优先级slave-priority最高的从库得分高

用户可以通过slave-priority配置项,给不同的从库设置不同优先级。比如,你有两个从库,它们的内存大小不一样,你可以手动给内存大的实例设置一个高优先级。在选主时,哨兵会给优先级高的从库打高分,如果有一个从库优先级最高,那么它就是新主库了。如果从库的优先级都一样,那么哨兵开始第二轮打分。

轮:和旧主库同步程度最接近的从库得分高

如果选择和旧主库同步最接近的从库作为主库,新主库上边就会有最新的数据。

如何判断从库和主库的同步进度呢?(复制进度)

主从库同步的时有个命令传播的过程,在这个过程中,主库会用master-repl-offset记录,当前的最新写操作在repl-backlog-buffer的中位置,而从库会用slave-repl-offset记录复制的进度

所以我们需要找到master-repl-offset,slave-repl-offset最接近的从库。得分就高,就会被选为新主库。如果slave-repl-offset相同,就会进行下一轮的打分。

旧主库的master_repl_offset是1000,从库1、2和3的slave_repl_offset分别是950、990和900,那么,从库2就应该被选为新主库。

轮:ID号小的从库得分高

每个实例都会有一个id,这个ID类似于从库的编号。Redis选主时,有一个规定:在优先级和复制进度相同的情况下,ID越小的得分越高。

  1. 主从切换总结

首先哨兵机制会根据在线状态网络状态,过滤筛选掉一部分不符合要求的从库。然后按照优先级复制进度ID大小对从库进行打分,得分最高的选为新主库。

3.3.3 准备条件

1. 修改sentinel.conf

在这里插入图片描述

2. 启动哨兵服务

redis-sentinel sentinel.conf

在这里插入图片描述

3.4 去中心化

  1. redis集群中总共16384个槽,平均分配到主节点上
  2. 当存入一个key时,会计算key的crc16的整数值。该值对16384求余,确定该key存放在哪个槽中
  3. 主从之间自动同步,主从之间存在哨兵

在这里插入图片描述

redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个整数结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。当你往Redis Cluster中加入一个Key时,会根据crc16(key) mod 16384计算这个key应该分布到哪个hash slot中,一个hash slot中会有很多key和value。你可以理解成表的分区,使用单节点时的redis时只有一个表,所有的key都放在这个表里;改用Redis Cluster以后会自动为你生成16384个分区表,你insert数据时会根据上面的简单算法来决定你的key应该存在哪个分区,每个分区里有很多key。

准备三主三从

1. 修改端口
2. dump文件名
3. aof文件名
4. aof目录名
5. 开启集群模式cluster-enabled yes
6. cluster-config-file nodes-7001.conf

在这里插入图片描述

启动redis

启动所有配置文件,并查看进程状况。

redis-server redisduanXXX.conf

在这里插入图片描述

在这里插入图片描述

分配槽以及主从关系

分槽,以及设置主从关系。 副本
redis-cli --cluster create --cluster-replicas 1 192.168.111.188:7001 192.168.111.188:7002 192.168.111.188:7003 192.168.111.188:7004 192.168.111.188:7005 192.168.111.188:7006 

在这里插入图片描述

命令行的客户端

redis-cli -c -h 192.168.111.188 -p 7006

可随意属于一个已开启的端口号,输入key之后,会根据计算的槽的位置自动跳转到对应的端口

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

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

相关文章

AI绘画入门实践|Midjourney:使用 --no 去除不想要的物体

在 Midjourney 中,--no 作为反向提示词,告诉 MJ 在生成图像时,不要包含什么。 使用格式:--no 对应物体提示词(多个物体之间使用","间隔) 使用演示 a web banner, summer holiday --v 6.0 a web b…

【Git多人协作开发】同一分支下的多人协作开发模式

目录 0.前言场景 1.开发者1☞完成准备工作&协作开发 1.1创建dev分支开发 1.2拉取远程dev分支至本地 1.3查看分支情况和分支联系情况 1.4创建本地dev分支且与远程dev分支建立联系 1.5在本地dev分支上开发file.txt 1.6推送push至远程仓库 2.开发者2☞完成准备工作&…

C++第十弹 ---- vector的介绍及使用

目录 前言vector的介绍及使用1. vector的使用1.1 vector的定义1.2 iterator的使用1.3 vector空间增长问题1.4 vector增删查改 2. vector迭代器失效问题(重点) 总结 前言 本文介绍了C中的vector数据结构及其使用方法。 更多好文, 持续关注 ~ 酷酷学!!! 正文开始 vector的介绍…

GPT-4O 的实时语音对话功能在处理多语言客户时有哪些优势?

最强AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量 我瞄了一眼OpenAI春季发布会,这个发布会只有26分钟,你可以说它是一部科幻短片,也可以说它过于“夸夸其谈”!关于…

Anconda 快速常用命令简洁版

目的:简单清楚的使用基本的conda 命令 可能需求 查看项目中的虚拟环境及依赖是否满足需求操作新环境来满足项目或者论文的实现 Anconda 常用命令 conda 查看基础命令1. 进入Anaconda 环境2. 查看版本3.查看有哪些虚拟环境4.激活虚拟环境5. 进入虚拟环境查看6. 退出…

如何在网站嵌入可填写的PDF表单:2024巴黎奥运会赛程

如何将可填写的 PDF 表单嵌入您的网页?访问者无需下载或注册即可查看并填写。 简单!本文以2024巴黎奥运会赛程表单为例,演示如何将其嵌入网页中。您可以在 ONLYOFFICE 表单库免费获取该模板,有白色和紫色两种背景设计。 如何在网站…

六、抽象工厂模式

文章目录 1 基本介绍2 案例2.1 Drink 抽象类2.2 Tea 类2.3 Coffee 类2.4 DrinkFactory 接口2.5 TeaFactory 类2.6 CoffeeFactory 类2.7 Client 类2.8 Client 类运行结果2.9 总结 3 各角色之间的关系3.1 角色3.1.1 Product ( 抽象产品 )3.1.2 ConcreteProduct ( 具体产品 )3.1.3…

昇思25天学习打卡营第1天|快速入门-实现一个简单的深度学习模型

目录 实验环境 Jupyter云上开发环境使用 导包 处理数据集 网络构建 模型训练 评估模型性能 保存模型 加载模型 预测推理 实验环境 02-快速入门.ipynb (4) - JupyterLab (mindspore.cn) 规格:4u 16G 20G 镜像:py39-ms2.3.0rc1 特性&#xff1…

SpringBoot 最大连接数及最大并发数是多少

SpringBoot 最大连接数及最大并发数 Spring Boot 是一个基于 Spring 框架的快速开发框架,它本身并不直接管理数据库连接或网络连接的最大连接数和最大并发数。这些参数通常由底层的基础设施和组件来控制,例如: 数据库连接池:Spri…

Qt 使用视口和窗口作图

物理坐标系与逻辑坐标系 绘图设备的物理坐标系是基本的坐标系,通过 QPainter 的平移、旋转等坐标变换可以得到更容 易操作的逻辑坐标系。 物理坐标系也称为视口(viewport)坐标系,逻辑坐标系也称为窗口( window&…

netty使用redis发布订阅实现消息推送

netty使用redis发布订阅实现消息推送 场景 项目中需要给用户推送消息: 接口 RestController public class PushApi {Autowiredprivate PushService pushService;/*** 消息推送* param query* return*/PostMapping("/push/message")public String push(RequestBody…

Linux gcc/g++ _ make/makefile

文章目录 库gcc/g程序编译过程链接动态链接静态链接 make _ makefile 库 一、 什么是库? 库是程序代码的集合,是共享程序代码的一种方式。根据源代码的公开情况,库可以分为两种类型: 开源库,公开源代码,能…

Godot入门 03世界构建1.0版

在game场景,删除StaticBody2D节点,添加TileMap节点 添加TileSet图块集 添加TileSet源 拖动图片到图块,自动创建图块 使用橡皮擦擦除。取消橡皮擦后按住Shift创建大型图块。 进入选择模式,TileMap选择绘制,选中图块后在…

MSQP Mysql数据库权限提升工具,UDF自动检测+快速反向SHELL

项目地址:https://github.com/MartinxMax/MSQP MSQP 这是一个关于Mysql的权限提升工具 安装依赖 $ python3 -m pip install mysql-connector-python 使用方法 $ python3 msqp.py -h 权限提升:建立反向Shell 在建立反向连接前,该工具会自动检测是否具有提权条件&#xff0…

软考:软件设计师 — 7.软件工程

七. 软件工程 1. 软件工程概述 (1)软件生存周期 (2)软件过程 软件开发中所遵循的路线图称为 "软件过程"。 针对管理软件开发的整个过程,提出了两个模型:能力成熟度模型(CMM&#…

解析嵌入式世界里中断和异常的不同之处

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」,点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!!是指CPU内部出现的中断&…

linux命令更新-文本处理awk

awk命令简介 awk是一种强大的文本处理工具,可以对文本文件进行格式化、统计、计算等操作。它逐行读取文本文件,并对每一行进行处理。awk的语法相对简单,但功能非常强大,是Linux系统中常用的文本处理工具之一。 awk命令基本语法 …

超燃!纯AI生成《泰坦尼克号》大片!浙大阿里发布MovieDreamer:超长电影生成“梦工厂“

论文链接:https://arxiv.org/pdf/2407.16655 项目主页:https://aim-uofa.github.io/MovieDreamer/ github链接:https://github.com/aim-uofa/MovieDreamer 亮点直击 MovieDreamer,一个新颖的分层框架,将自回归模型与扩…

idea设置类注释模板作者、日期、描述等信息

文章目录 前言一、新建类的时候自动添加类注释1.打开设置2.模版配置示例如下3.实际生成效果 前言 由于每次换电脑时都需要重新对idea进行设置,为了方便大家的开发配置,同时也为自己以后配置留一份记录(毕竟每次换环境都需要重新配置一遍&…

代码审计 | .NET SqlSugar框架注入漏洞

01阅读须知 此文所节选自小报童《.NET 代码审计》专栏,主要内容有涉及的.NET目录和文件操作、SQL注入方向的敏感函数、还有不安全的配置导致的漏洞挖掘思路,对.NET代码审计感兴趣的朋友们可以解锁该电子报刊,解锁更多的报刊内容。 02基本介…