Redis是否支持ACID_Redis不支持ACID_关于Redis的ACID性质的解释

关于Redis的ACID性质的解释

1 ACID性质简介

事务是一个数据库必备的元素,对于redis也不例外,对于一个传统的关系型数据库来说,数据库事务满足ACID四个特性:

  • A代表原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样;
  • C代表一致性:事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束;
  • I代表隔离性:多个事务并发执行时,一个事务的执行不应影响其他事务的执行;
  • D代表持久性:已被提交的事务对数据库的修改应该永久保存在数据库中。

然而,对于redis来说,只满足其中的:一致性隔离性两个特性,其他特性是不支持的。

2 Redis事务的ACID性质讨论
2.1 原子性

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

2.2 一致性

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

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

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

2.3 隔离性

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

2.4 持久性

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

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

来源:https://www.cnblogs.com/chenpingzhao/archive/2015/11/27/5001894.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值