【速成Redis】04 Redis 概念扫盲:事务、持久化、主从复制、哨兵模式

news2024/9/22 3:53:50

前言:

前三篇如下:

【速成Redis】01 Redis简介及windows上如何安装redis-CSDN博客

【速成Redis】02 Redis 五大基本数据类型常用命令-CSDN博客

【速成Redis】03 Redis 五大高级数据结构介绍及其常用命令 | 消息队列、地理空间、HyperLogLog、BitMap、BitField-CSDN博客

该篇04是速成系列的完结篇,主要对redis一些重要概念进行扫盲性认知,如事务、持久化、主从复制、哨兵模式。 道阻且长,学完这4篇只能称得上是刚入门redis。剩下还有很多路要走。


目录

一、redis 事务

1.认知:不是传统的事务

2.redis可以保证以下3点

3.实操

 二、持久化

1.RDB

- 可以通过使用配置文件中的save参数来配置:

- 通过手工save命令

- 快照文件缺点:

2.AOF

- 原理:

- 开启AOF的方式:

三、主从复制

四、哨兵模式 


一、redis 事务

1.认知:不是传统的事务

redis的事务和我们之前学习的关系型数据库的事务是不太一样。

在关系型数据库中,事务是一个原子操作,要么全部执行成功,要么全部执行失败。

而在redis中,事务并不能保证所有命令都会执行成功。

redis所支持的支持事务,也就是可以在一次请求中执行多个命令,reids中的事务主要通过MULTI和EXEC实现的。

MULTI命令用来开启一个事务。事务开启后,所有命令会被放入一个队列中,最后通过一个EXEC命令来执行事务中的所有命令。


2.redis可以保证以下3点

1.在发送EXEC命令之前,所有命令都会被放入到一个队列中缓存起来,不会立即执行

2.在收到EXEC命令之后,事务开始执行,事务中任何一个命令执行失败,其他命令依然会回执行。

3.在事务执行过程中,其他客户端提交的命令请求,并不会被插入到事务的执行命令序列中。


3.实操

1.MUTLI开启事务、EXEC提交事务

2.验证事务的特性:

先创建三个新的键:k3、k4、k5

开启事务并且,让其自增,很显然k4的value无法解析为数字,无法自增

结束事务,开始执行命令:

可以看到第二个命令执行失败,别的键已经自增,k4没有变化


 二、持久化

持久化是redis一个非常重要的功能,因为redis是基于内存的数据库,如果没有持久化的话,一旦服务器重启或者断电,那么之前所有的数据都会丢失。


redis持久化主要有两种方式:


1.RDB

是指在指定时间间隔内,将内存中的数据快照写入磁盘,它是某一个时间点上数据的完整副本。

- 可以通过使用配置文件中的save参数来配置:

如图,找到redis.windows.conf配置文件

把sava命令修改

save x y:在x秒时候至少y个键被修改进行一次快照

(根据自己电脑的配置和使用情况修改)

带着新配置文件启动redis服务

在客户端可以检查配置


- 通过手工save命令

除了用配置文件触发快照之外,还可以使用save命令来手工触发快照。

依旧是同一个配置文件,这里是快照储存路径。

执行完修改之后,手工save。

在快照保存处可以看到rdb文件了。


- 快照文件缺点:

     如果服务机器在最后一次快照之后宕机了,那么最后一次快照之后的修改内容都会丢失掉。所以RDB更适合用来做备份, 比如可以每天凌晨时,通过crontab来执行一次save 命令,然后将快照文件备份到其他地方,保证数据安全。

       在生产环境中,我们为redis开辟的内存区域都比较大,那么内存中的数据同步到硬盘这个过程,就会持续比较长的时间,这段时间redis处于一个阻塞状态,显然是不行的,这段时间内redis都是处于一个阻塞状态,不能接受任何请求。

       于是redis提供了一个bgsave的命令,这个命令会单独创建一个子进程,来负责内存数据写入硬盘。这时候主进程就可以接受请求了,但这个过程中还是会有一定的性能损耗。因为fork一个子进程是需要时间的,这段时间redis还是不能处理任何请求,无法做到秒级快照。

2.AOF

- 原理:

       为了解决快照文件的这个问题,redis提供了另一种文件持久化方式:AOF(字面意思是追加文件),它的原理是在执行写命令时,不仅会将命令写入到内存中,也会讲命令写到一个文件中,这个文件就是AOF文件。它会以日志形式记录整个写操作,当redis重启时,它就会重新通过AOF文件中的命令,来在内存中重建整个数据库内容。

- 开启AOF的方式:

如图,依旧是那个配置文件,把appendonly后的no改为yes 


三、主从复制

主从复制是指将一台redis服务器节点复制到另一台redis服务器。

也叫主节点、从节点:

一个主节点可以有多个从节点,而一个从节点只可以有一个主节点。

核心作用:主节点的变化能自动同步到从节点上。

数据复制是单向的,只能由主节点到从节点。一般来说,主节点负责写操作,从节点负责读操作。主节点会将自己的数据变化,通过异步的方式发送给从节点,从节点接收到主节点的数据之后,更新自己的数据,这样就达到了数据一致的目的。 


实际动手配置主从复制:主节点不需要修改任何配置,要修改的是从节点的配置。

命令配置方式有两种:一种是通过命令行执行命令。

slaveof方式指定主节点的ip和端口,这种方式不常用,了解即可,

 另一种是通过配置文件(常用),实操过多这里不着重介绍。该篇主要扫盲,了解什么是主从复制。


四、哨兵模式

导入:

我们可以通过主从复制,为一个主节点,配置两个从节点,形成一主两从的redis集群,实现了一定程度上的高可用。相比单节点的redis来说有了很大的提升。

但是这个集群还是有一定问题的,主节点宕机了,我们还是需要手工去把另一台从节点提升为主节点,还是要人工干预,不是真正的高可用。

有什么方法可以实现自动的故障转移呢?这就是redis哨兵模式!


哨兵会以一个独立的进程,运行在redis集群中,用来监控redis的各个节点是否运行正常,主要用来执行下面几个功能:

1.监控:通过不断地发送通知,检查redis节点是否正常

2.通知:如果发现某个节点出问题了,哨兵就会通过发布订阅模式,来通知其他节点

3.自动故障转移:当主节点不能正常工作时,哨兵就会开启一个自动故障转移的操作,它会将一个从节点升级为一个新的主节点。然后再将其他的从节点指向新的主节点。

ps:哨兵本身也是一个进程,它自己也会有单节点故障的问题.

所以一般在实际的生产环境,会使用三个哨兵节点保证高可用,这三个哨兵节点会通过选举方式,选出领导者,然后由领导者来监控其他节点。如果领导者挂了,那么其他哨兵节点会重新选举出一个领导者,这样就可以保证哨兵节点的高可用了。

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

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

相关文章

python有main函数吗

python和C/Java不一样,没有主函数一说,也就是说python语句执行不是从所谓的主函数main开始的。 当运行单个python文件时,如运行a.py,这个时候a的一个属性__name__是__main__。 当调用某个python文件时,如b.py调用a.p…

基于微信小程序的童装商城的设计与实现+ssm(lw+演示+源码+运行)

童装商城小程序 摘 要 随着移动应用技术的发展,越来越多的用户借助于移动手机、电脑完成生活中的事务,许多的传统行业也更加重视与互联网的结合,由于城镇人口的增加,人们去商场购物总是排着长长的队伍,对于时间紧的人…

数据类型转换中存在的问题分析

本文档包含内容有: 数据类型转换中的隐式类型转换存在的风险; 整型提升存在的风险 标准算数转换存在的风险数据类型转换中存在的数据类型范围溢出风险;数据类型转换中存在的数据精度问题(数据截断)。 隐式类型转换&a…

此框架你到底了解多少???

1.简述对Spring中IOC/DI的理解 IOC:控制反转,将创建和管理的对象的任务交给外部的Spring容器 DI:依赖注入,对象之间存在依赖关系,创建对象时,对其依赖的对应直接进行赋值 2.有哪些依赖注入的方式 基于注…

【计算机网络】详解UDP套接字网络字节序IP地址端口号

一、网络字节序 我们已经知道, 内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之分. 发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出; 接收主机把从网络上接到…

软考中级软设背诵内容

冯诺依曼结构、哈佛结构 冯诺依曼结构: 程序指令和数据都采用二进制表示 程序指令和数据在同一个存储器中混合 程序的功能都由中央处理器(CPU)执行指令来实现 程序的执行工作由指令进行自动控制 SRAM、DRAM 与DRAM相比,SRAM集成率低、功…

页面布局实现-左侧横向滑动展示隐藏数据,右侧固定展示操作按钮。可上下滑动联动

效果图 1.布局排版 <LinearLayoutandroid:layout_width"match_parent"android:layout_height"match_parent"android:orientation"vertical"android:padding"1dp"><LinearLayoutandroid:id"id/lltList"android:lay…

Java:Clonable 接口和拷贝

一 Clonable 接口 在 Java SE 中&#xff0c;Cloneable 是一个标记接口&#xff08;Marker Interface&#xff09;&#xff0c;它位于 java.lang 包中。这个接口的主要目的是标识实现该接口的类能够被合法地克隆&#xff08;即可以调用 Object 类中的 clone() 方法&#xff09…

Electron应用程序打包后运行报错cannot find module ‘@vue/cli-service‘

本项目打包运行后报错问题的解决办法&#xff0c;类似于其他cannot find module XXX’的报错&#xff0c;也基本可以解决 文章目录 electron应用程序打包后运行报错排查问题解决办法 electron应用程序打包后运行报错 错误如下&#xff1a; 提示找不到该模块 排查问题 本项…

互联网广告产品基础知识

一 计价与效果 广告产品如何估算收入&#xff1f; 一种是从需求侧计算&#xff1a;按照广告主数量进行拟合&#xff1b;一种是从供给侧计算&#xff1a;按照曝光量和千次曝光单价进行拟合。 需求侧 从需求侧&#xff0c;也就是广告主侧&#xff0c;来计算广告产品的总收入&…

Linux命令:用于创建新的用户组的命令行工具groupadd 详解

目录 一、概述 二、组标识符GID 1、定义 &#xff08;1&#xff09;标识符 &#xff08;2&#xff09;与UID的关系 2、GID的作用 &#xff08;1&#xff09;用户组管理 &#xff08;2&#xff09;文件权限控制 &#xff08;3&#xff09;用户权限管理 &#xff08;4&…

threejs性能优化之gltf文件压缩threejs性能优化之glb文件压缩

在使用Three.js进行3D图形开发时&#xff0c;GLTF&#xff08;GL Transmission Format&#xff09;文件因其高效性和灵活性而广受欢迎。然而&#xff0c;随着模型复杂度的增加&#xff0c;GLTF文件的大小也会显著增加&#xff0c;这可能会对加载时间和渲染性能产生负面影响。为…

插入与冒泡排序(C++)

\一、插入排序 1 简介 插入排序&#xff0c;也称为直接插入排序&#xff0c;其排序思想和我们平时打扑克牌时排序类似。 2 算法步骤 将第一个元素看作已排序序列&#xff0c;第二个到最后一个看作未排序序列。 第二个元素&#xff0c;与之前已排序号的序列进行对比&#x…

【我的 PWN 学习手札】tcache stash with fastbin double free —— tcache key 绕过

参考看雪课程&#xff1a;PWN 探索篇 前言 tcache key 的引入使得 tcache dup 利用出现了困难。除了简单利用 UAF 覆写 key 或者House Of Karui 之外&#xff0c;还可以利用 ptmalloc 中的其他机制进行绕过。 一、Tcache Stash with Fastbin Double Free 之前是 double free …

软考中级软件设计师——知识产权学习记录

软考中级软件设计师——知识产权 著作权人身权著作财产权著作权侵权行为 计算机软件著作权基本知识计算机软件著作权侵权 专利地域性与专利权申请基本知识专利权侵权 职务作品委托开发商业秘密权基本知识商业秘密侵权 商标权与商标注册基本知识商标权侵权 著作权 著作权也称为…

Spring的任务调度

Spring的任务调度 1.概述 Spring框架为任务调度提供了专门的解决方案。在Spring框架的org.springframework.scheduling包中&#xff0c;通过对JDK 的ScheduledExecutorService接口的实例进行封装&#xff0c;对外提供了一些注解和接口&#xff0c;为开发者处理定时任务提供了…

网安面试会问到的:http的长连接和短连接

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

探索 Python 的火焰:Fire 库的神秘力量

文章目录 &#x1f525; 探索 Python 的火焰&#xff1a;Fire 库的神秘力量第一部分&#xff1a;背景介绍第二部分&#xff1a;Fire 库是什么&#xff1f;第三部分&#xff1a;如何安装 Fire&#xff1f;第四部分&#xff1a;简单库函数使用方法第五部分&#xff1a;场景应用第…

32.递归、搜索、回溯之floodfill算法

0.简介 1.图像渲染 . - 力扣&#xff08;LeetCode&#xff09; 题目解析 算法原理 代码 class Solution {int[] dx { 0, 0, 1, -1 };int[] dy { 1, -1, 0, 0 };int m, n;int prev;public int[][] floodFill(int[][] image, int sr, int sc, int color) {if (image[sr][sc]…

yolov5足球运动分析-速度分析-足球跟踪

足球分析项目 引言 在现代体育分析领域&#xff0c;利用先进的计算机视觉技术和机器学习模型对比赛视频进行深入解析已成为一种趋势。本项目旨在通过YOLO&#xff08;You Only Look Once&#xff09;这一顶级的人工智能目标检测模型来识别并跟踪足球比赛中的球员、裁判以及足球…