首页 > 数据库 >[Redis]事务特性

[Redis]事务特性

时间:2024-09-07 23:03:05浏览次数:3  
标签:AOF 事务 Redis 特性 模式 RDB 执行

redis事务的ACID性质讨论

A原子性

单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的
如果一个事务队列中的所有命令都被成功地执行,那么称这个事务执行成功
另一方面,如果 Redis 服务器进程在执行事务的过程中被停止 —— 比如接到 KILL 信号、宿主机器停机,等等,那么事务执行失败
事务失败时,Redis 也不会进行任何的重试或者回滚动作,不满足要么全部全部执行,要么都不执行的条件

C一致性

一致性分下面几种情况来讨论:
首先,如果一个事务的指令全部被执行,那么数据库的状态是满足数据库完整性约束的
其次,如果一个事务中有的指令有错误,那么数据库的状态是满足数据完整性约束的
最后,如果事务运行到某条指令时,进程被kill掉了,那么要分下面几种情况讨论:

如果当前redis采用的是内存模式,那么重启之后redis数据库是空的,那么满足一致性条件
如果当前采用RDB模式存储的,在执行事务时,Redis 不会中断事务去执行保存 RDB 的工作,只有在事务执行之后,保存 RDB 的工作才有可能开始。所以当 RDB 模式下的 Redis 服务器进程在事 务中途被杀死时,事务内执行的命令,不管成功了多少,都不会被保存到 RDB 文件里。 恢复数据库需要使用现有的 RDB 文件,而这个 RDB 文件的数据保存的是最近一次的数 据库快照(snapshot),所以它的数据可能不是最新的,但只要 RDB 文件本身没有因为 其他问题而出错,那么还原后的数据库就是一致的

如果当前采用的是AOF存储的,那么可能事务的内容还未写入到AOF文件,那么此时肯定是满足一致性的,如果事务的内容有部分写入到AOF文件中,那么需要用工具把AOF中事务执行部分成功的指令移除,这时,移除之后的AOF文件也是满足一致性的

所以,redis事务满足一致性约束

I隔离性

Redis 是单进程程序,并且它保证在执行事务时,不会对事务进行中断,事务可以运行直到执行完所有事务队列中的命令为止。因此,Redis 的事务是总是带有隔离性的。

D持久性

因为事务不过是用队列包裹起了一组 Redis 命令,并没有提供任何额外的持久性功能,所以事务的持久性由 Redis 所使用的持久化模式决定

在单纯的内存模式下,事务肯定是不持久的
在 RDB 模式下,服务器可能在事务执行之后、RDB 文件更新之前的这段时间失败,所以 RDB 模式下的 Redis 事务也是不持久的
在 AOF 的“总是 SYNC ”模式下,事务的每条命令在执行成功之后,都会立即调用 fsync 或 fdatasync 将事务数据写入到 AOF 文件。但是,这种保存是由后台线程进行的,主线程不会阻塞直到保存成功,所以从命令执行成功到数据保存到硬盘之间,还是有一段非常小的间隔,所以这种模式下的事务也是不持久的。
其他 AOF 模式也和“总是 SYNC ”模式类似,所以它们都是不持久的。

标签:AOF,事务,Redis,特性,模式,RDB,执行
From: https://www.cnblogs.com/DCFV/p/18402292

相关文章

  • Redis 事务:支持回滚吗?深入解析》
    今天我们要来探讨一个关于Redis事务的重要问题:Redis事务支持回滚吗?这个问题在Redis的使用中经常被提及,对于正确理解和使用Redis事务至关重要。那么,让我们一起深入解析这个问题吧!一、Redis事务简介在了解Redis事务是否支持回滚之前,我们先来简单回顾一下Redis事务的基......
  • Redis 管道的神奇力量
    《Redis管道的神奇力量》嘿,Redis爱好者们!今天我们要来探索一个Redis中非常强大且实用的特性——管道(Pipeline)。如果你想让你的Redis操作更加高效,那么这篇文章绝对值得一读。一、Redis管道是什么Redis管道是一种在客户端和服务器之间批量执行命令的技术。它允许客户端将......
  • [Redis]Redis到底是单线程还是多线程程序?
    概述这里我们先给出问题的全面回答:Redis到底是多线程还是单线程程序要看是针对哪个功能而言,对于核心业务功能部分(命令操作处理数据),Redis是单线程的,主要是指Redis的网络IO和键值对读写是由一个线程来完成的,这也是Redis对外提供键值存储服务的主要流程,所以一般我们认为Red......
  • Centos7怎么安装Redis5.0
    Centos7怎么安装Redis5.0转载:https://www.php.cn/faq/553616.htmlWBOY发布:2023-06-0119:08:49转载1737人浏览过 一、安装gcc依赖由于 redis 是用C语言开发,安装之前必先确认是否安装gcc环境(gcc-v),如果没有安装,执行以下命令进行安装 [root@localho......
  • 【redis】数据量庞大时的应对策略
    文章目录为什么数据量多了主机会崩分布式系统应用数据分离架构应用服务集群架构负载均衡器数据库读写分离引入缓存冷热分离架构分库分表微服务是什么代价优势为什么数据量多了主机会崩一台主机的硬件资源是有上限的,包括但不限于一下几种:CPU内存硬盘网络…服务器......
  • mybatis事务详解
    对于数据库事务,我们都不陌生,数据库的事务(Transaction)是数据库管理系统执行过程中的一个逻辑单位,也是一个不可分割的工作单位。它包含一个或多个SQL语句,这些语句要么全部执行,要么全部不执行。事务是一个原子操作单元,其对数据的修改要么全都执行,要么全都不执行。那么我们就得来看看这......
  • 2024最全前端面试系列(ES6)(ES6你不得不知道的新特性)
    functionfn(){return“HelloWorld”;}foo${fn()}bar//fooHelloWorldbarSymbolSymbol是ES6新增的基本类型。Symbol值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的Symbol类型。凡是属性名属于Sy......
  • 事务发件箱模式在 .NET 云原生开发中的应用(基于Aspire)
    原文:TransactionalOutboxin.NETCloudNativeDevelopmentviaAspire作者:OleksiiNikiforov总览这篇文章提供了使用Aspire、DotNetCore.CAP、AzureServiceBus、AzureSQL、Bicep和azd实现Outbox模式的示例。源代码:https://github.com/NikiforovAll/cap-aspire......
  • C#特性(Attribute)
    特性(Attribute)是用于在运行时传递程序中各种元素(比如类,方法,结构,枚举,组件等)的行为信息的声明性标签.可以通过使用特性向程序添加声明性信息.一个声明性标签是通过放置在它所应用的元素前面的方括号[]来描述的.特性(Attribute)用于添加元数据,如编译器指令和注释,描述,......
  • 【redis】redis编译和redis.conf配置
    下载源码reids解压编译#解压tar-zxvfredis-5.0.14.tar.gzcdredis-5.0.14/makePREFIX=/opt/redisinstall#requirepassroot#开启远程访问bind0.0.0.0protected-modeno#修改日志打印路径,修改redis.confdaemonizeyeslogfile/var/log/redis.lo......