1.一致性
Redis的一致性问题可以分为两部分来讨论:入队错误、执行错误。
在命令入队的过程中,如果客户端向服务器发送了错误的命令,Redis会拒绝执行事务,并返回失败信息。
如果命令在事务执行的过程中发生错误,那么Redis只会将错误包含在事务的结果中,这不会引起事务中断或整个失败,不会影响已执行事务命令的结果,也不会影响后面要执行的事务命令,所以它对事务的一致性也没有影响。
2.隔离性
Redis是单进程程序,并且它保证在执行事务时,不会对事务进行中断,事务可以运行直到执行完所有事务队列中的命令位置。因此,Redis的事务是总是带有隔离性的。
3.原子性
在上述一致性的介绍中,可以看出在事务队列中,即使有命令执行错误,该事务也会执行完,符合原子性的要求。
4.持久性
因为事务不过是用队列包裹起了一组Redis命令,并没有提供任何额外的持久性功能,所以事务的持久性由Redis所使用的持久化模式决定:
在单纯的内存模式下,事务肯定是不持久的。
在RDB模式下,服务器可能在事务执行之后、RDB文件更新之前的这段时间失败,所以RDB模式下的Redis事务也是不持久的;
在AOF的“总是SYNC”模式下,事务的每条命令在执行成功之后,都会立即调用fsync或fdatasync将事务数据写入到AOF文件。但是,这种保存是由后台线程进行的,主线程不会阻塞直到保存成功,所以从命令执行成功到数据保存到硬盘之间,还是有一段非常小的间隔,所以这种模式下的事务也是不持久的;
其他AOF模式也和“总是SYNC”模式类似,所以他们都是不持久的;
综上所述,Redis事务满足原子性、一致性、隔离性,不满足持久性。
Redis事务
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。