Redis(事务和持久化)(很重要!)

news2024/11/14 10:56:22

事务的定义:

Redis中的事务是指一组命令的集合,这些命令可以在一个原子操作中执行。在Redis中,可以使用MULTI命令开始一个事务,然后使用EXEC命令来执行事务中的所有命令,或者使用DISCARD命令来取消事务。事务可以确保在执行期间不会被其他客户端的命令中断,并且可以保证事务中的所有命令要么全部执行成功,要么全部失败。事务在Redis中通常用于执行一系列相关的命令,以确保这些命令要么全部成功,要么全部失败。

Redis中的事务主要是通过MULTIEXEC这两个命令来实现的。MULTI用于开启一个事务,事务开启之后,所有的命令都会被放到一个队列中,最后通过一个EXEC命名来执行事务中的所有命令。

Redis中的事务没有原子性,并不能保证所有的命令都会执行成功。

上图使用 MULTI开启事务,返回OK代表开启事务成功。上图中的(TX)就表示事务开始中,然后设置两个键值对,这里返回QUEUED而不返回OK,表示我们的命令已经被放到了队列中。

这时打开一个终端获取键值,发现为空,这时因为事务还未执行。

 

通过EXEC命令来执行事务。 

在执行事务后,再次获取键值,就可以获取到了。

 事务中的命令出现错误,并不会影响后面命令的执行。这里开启事务后让这三个键自增,由于k4是一个字符类型并不能解析为整数,所有就会出现错误。

 

观察上图获取到的值,发现Redis事务中命令出现错误并不会影响到正确命令的执行。

持久化的定义:

在Redis中,持久化是指将数据存储在磁盘上,以便在Redis重启时可以恢复数据。Redis支持两种主要的持久化方式:

1. RDB(Redis DataBase)持久化:RDB持久化通过将Redis在内存中的数据快照写入磁盘来实现持久化。管理员可以配置Redis定期将数据快照写入磁盘,以便在Redis重启时恢复数据。RDB持久化适合于对数据一致性要求不是非常高的场景。

2. AOF(Append-Only File)持久化:AOF持久化通过将Redis接收到的写命令追加到一个日志文件中来实现持久化。当Redis重启时,它会重新执行这些写命令来恢复数据。AOF持久化通常比RDB持久化更加安全,因为它可以提供更好的数据一致性保证。

持久化使得Redis可以在重启后恢复数据,从而避免了数据丢失的风险。管理员可以根据实际需求选择合适的持久化方式,并根据需要对持久化参数进行调优。

持久化是Redis中一个基于内存的数据库,如果没有持久化,那么一旦服务器重启或者断电,那么之前的所有数据都会丢失。这对于一个数据库是非常致命的。

第一种方式(RDB)   是某一个时间点上数据的完整副本,可以通过配置文件中的save参数来配置。

      

第一个参数表示秒数,第二个参数表示修改次数。

 有上图三种默认配置。

第一种解释为:3600s之内有一次修改就进行一次快照。其他同理。

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

 

上图的dump.conf就是生成的快照文件。

快照文件的缺点:

如果服务器在快照之后宕机了,那么最后一次快照之后的所有修改内容都会丢失掉。

 考虑到快照文件的缺点,所有RDB适合更适合用来做备份。

还有一个问题:由于生产环境中我们为Redis开辟的内存区域一般都比较大,那么内存中的数据同步到硬盘这个过程就会持续比较长的时间,这段时间内Redis都处于一个阻塞的状态,不能接收任何请求。

所以为了应对这种情况,Redis提供了叫做bgsave的命令,这个命令会单独创建一个子进程,来负责将内存中的数据写入到硬盘中,这样的话主进程就可以继续处理请求了。但是这个过程中还会有一定的性能损耗,因为fork一个子进程也是需要时间的,这段时间内Redis还是不能处理任何请求。没有办法做到秒级的快照。

 为了解决这种问题Redis又提供了另一种叫AOF的持久化方式。他的原理是在执行写命令的时候,不仅会将命令写到内存中还会将命令写入到一个追加的文件中,这个文件就是AOF。他会以日志的形式来记录每一个写操作。当Redis重启的时候就会通过重新执行AOF文件中的命令来在内存中重建整个数据库的内容。

开启AOF的方式只需要在AOF的配置文件中将appendonly后面的no修改为yes就好了然后保存退出配置文件就好。

进入配置文件的命令为:

vi redis.conf

然后输入/append,就可查看append的配置文件了,前面的查看save配置文件同理。 

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

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

相关文章

探索 Material 3:全新设计系统和组件库的介绍

探索 Material 3:全新设计系统和组件库的介绍 一、Material 3 简介1.1 Material 3 的改进和更新1.2 Material 3 的优势特点 二、Material 3 主题使用2.1 使用 Material3 主题2.2 使用 Material3 主题颜色 三、Material 3 组件使用3.1 MaterialButton:支持…

策略模式实践

目录 前言 五个部分 名词解释 代码 controller层 HelloService接口 实现类 自定义注解 上下文 策略工厂 Java SPI配置 验证 前言 五个部分 接口、实现类、自定义注解、上下文、策略工厂 名词解释 自定义注解(方便后期增加实现类后灵活控制策略) 上下文(初始化…

【Java 进阶篇】深入理解 Jackson:Java 对象转 JSON 的艺术

嗨,亲爱的小白们!欢迎来到这篇关于 Jackson JSON 解析器中 Java 对象转 JSON 的详细解析指南。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,而 Jackson 作为一个强大的 JSON 解析库,能够帮…

Apache Airflow (十三) :Airflow分布式集群搭建及使用-原因及

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹…

linux rsyslog综合实战2

本次我们通过rsyslog服务将A节点服务器上的两个(E.g:多个日志也可以)日志(Path:/var/log/245-1.log、245-2.log)实时同步到B节点服务器目录下(Path:/opt/rsyslog/245) 1.rsyslog架构 2.环境信息 环境信息 HostnameIpAddressOS versionModuleNotersyslog1192.168.10.245CentOS…

②【Hash】Redis常用数据类型:Hash [使用手册]

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Redis Hash ②Redis Hash 操作命令汇总1. hset…

【冒泡排序设计】

【冒泡排序设计】 思路代码结果 思路 冒泡排序这个算法,对于我这样的初学者来说,也不是很简单!!!(没有想象的那么简单)!  它的核心思想是:两两相邻的元素进行比较&#…

【代码随想录】算法训练计划28

回溯 1、491. 递增子序列 题目: 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素,如出现两个整数相等,也可以…

ElementUI用el-table实现表格内嵌套表格

文章目录 一、效果图二、使用场景三、所用组件元素(Elementui)四、代码部分 一、效果图 二、使用场景 🛀el-form 表单内嵌套el-table表格 🛀el-table 表格内又嵌套el-table表格 三、所用组件元素(Elementui&#xff…

【云原生-Kurbernetes篇】HPA 与 Rancher管理工具

文章目录 一、Pod的自动伸缩1.1 HPA1.1.1 简介1.1.2 HPA的实现原理1.1.3 相关命令 1.2 VPA1.2.1 简介1.2.2 VPA的组件1.2.3 VPA工作原理 1.3 metrics-server简介 二、 HPA的部署与测试2.1 部署metrics-serverStep1 编写metrics-server的配置清单文件Step2 部署Step3 测试kubect…

[Docker]七.配置 Docker 网络

一.Docker0 网络 1.多个容器之间如何通信,是否可以直接连接 默认启动的所有容器都会加入到docker0这个网络中,所有各个容器件是可以直接通信的 先看看网卡信息: 启动几个容器来演示一下: #启动mycentos这个容器 [rootlocalhost zph]# docker run -it -d --name mycentos d757…

砖家测评:腾讯云标准型S5服务器和s6性能差异和租用价格

腾讯云服务器CVM标准型S5和S6有什么区别?都是标准型云服务器,标准型S5是次新一代云服务器规格,标准型S6是最新一代的云服务器,S6实例的CPU处理器主频性能要高于S5实例,同CPU内存配置下的标准型S6实例要比S5实例性能更好…

Linux下安装go

正式环境: 1、找到linux 版本go包 (Downloads - The Go Programming Language) 2、下载 wget https://dl.google.com/go/go1.17.5.linux-amd64.tar.gz3、解压到/usr/local (官方推荐) tar -C /usr/local -zxvf go1…

安卓手机termux上安装MariaDB数据库并实现公网环境下的远程连接

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备,尽管最初并非设计为服务器,但是随着技术的进步我们可以将Android配置为生产力工具,变成一个随身…

1.Gin 介绍

1.Gin 介绍 介绍 Gin 是一个 Go (Golang) 编写的轻量级 http web 框架,运行速度非常快,如果你是性能和高效的追求者,我们推荐你使用 Gin 框架。 Gin 最擅长的就是 Api 接口的高并发,如果项目的规模不大,业务相对简单&a…

MySQL数据库:开源且强大的关系型数据库管理系统

大家好,我是咕噜-凯撒,数据在当今信息化时代的重要性不可忽视。作为企业和组织的重要资产,数据的管理和存储变得至关重要,MySQL作为一种关系型数据库管理系统,具有非常多的优势,下面简单的探讨一下MySQL数据…

身为程序员哪一个瞬间让你最奔溃 ?

身为程序员,有时候最让我感到沮丧的瞬间之一是遇到难以追踪和解决的 Bug。这些 Bug 可能出现在我写的代码中,也可能是由于不可预测的外部因素引起的。其中一个让我最奔溃的瞬间是在一个大型项目中,我遇到了一个非常复杂的Bug,这个…

【DevOps】Git 图文详解(七):标签管理

Git 图文详解(七):标签管理 标签(Tags)指的是某个分支某个特定时间点的状态,是对某一个提交记录的 固定 “指针” 引用。一经创建,不可移动,存储在工作区根目录下 .git\refs\tags。可…

C++ LibCurl实现Web指纹识别

Web指纹识别是一种通过分析Web应用程序的特征和元数据,以确定应用程序所使用的技术栈和配置的技术。这项技术旨在识别Web服务器、Web应用框架、后端数据库、JavaScript库等组件的版本和配置信息。通过分析HTTP响应头、HTML源代码、JavaScript代码、CSS文件等&#x…

px4+vio实现无人机室内定位

文章主要讲述px4 如何利用vins_fusion里程计数据实现在室内定位功能。 文章基于以下软、硬件展开。 硬件软件机载电脑: Intel NUC系统:Ubuntu 20.04相机: Intel Realsense D435iros:noetic飞控:Pixhawk 2.4.8固件&am…