事务的ACID性质
最近在读黄健宏的《Redis设计与实现》,现在看到了事务这章,由于之前(上学)没有好好整理过数据库事务的四大性质,导致现在(工作)看到了就和第一次知道一样((lll¬ω¬))。还是要把基础打好,以后一定要多多整理基础知识。
redis本质上也是一个数据库,它在内存中以键值对的形式操作数据。所以与传统的关系型数据库还是有一定不同的,但在这里,我忽略具体机制的不同,只抽取事务这块,对它的性质进行简单的描述。
在传统的关系型数据库中,常常用ACID性质来检验事务功能的可靠性和安全性。
事务提供了一种将命令打包,然后一次性、有序地执行的机制。
1、原子性(Atomicity)
事务具有原子性指的是,数据库将事务中的多个操作当作一个整体来执行,服务器要么执行事务中的所有操作,要么一个操作也不执行。
拿redis的事务功能来说,事务队列中的命令要么全部执行,要么就一个都不执行,因此redis的事务是具有原子性的。
redis事务与传统关系型数据库事务的最大区别在于,redis不支持事务回滚机制,即使事务队列中的某个命令在执行期间出现了错误,整个事务也会继续执行下去,直到将事务队列中的所有命令都执行完毕为止。
2、一致性(Consistency)
事务具有一致性指的是,如果数据库在执行事务前是一致的,那么在执行事务后,无论事务是否执行成功,数据库也应该是一致的。一致指的是数据符合数据库本身的定义和要求,没有包含非法或无效的错误数据。
3、隔离性(Isolation)
事务的隔离性指的是,即使数据库中有多个事务并发地执行,各个事务之间也不会互相影响,并且在并发状态下执行的事务和串行执行的事务产生的结果完全相同。
因为redis使用单线程的方式执行事务(以及事务队列中的命令),并且服务器保证在执行事务期间不会对事务进行中断,因此redis的事务总是以串行的方式运行的,并且事务也总是具有隔离性的。
4、耐久性(Durability)
事务的耐久性指的是,当一个事务执行完毕时,执行这个事务的结果已经被保存在永久性存储介质中了,即使服务器在事务执行完毕后停机,执行事务所得的结果也不会丢失。
因为redis的事务不过是简单地用队列包裹起了一组redis命令,redis并没有为命令提供额外的持久化功能,所以redis事务的耐久性由redis所使用的持久化模式决定(AOF&appendfsync=always可以实现事务持久化)。
事务的ACID性质的更多相关文章
- 深入理解大数据之——事务及其ACID特性
目录 事务简介 事物的定义 事务的目的 事务的状态 事务的ACID属性 ACID简介 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durabi ...
- 数据库的事务、ACID及隔离级别
事务 所谓事务是用户定义的一个数据库操作序列,这些操作要么全做,要么不做,是一个不可分割的工作单位.例如,在关系数据库中,一条或一组SQL语句.整个程序都可以是一个事务. 事务和程序是两个概念,一个程 ...
- 深入学习MySQL事务:ACID特性的实现原理
事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段.本文将首先介绍MySQL事务相关的基础概念,然后介绍事务的ACID特性,并分析其实现原理. MySQL博大精深,文 ...
- MySQL事务及ACID特性
一.事物 1.定义:事务是访问和更新数据库的程序执行单元,事务中包含一条或者多条SQL语句,这些语句要么全部执行成功,要么都不执行. 在MySQL中,事务支持是在引擎层实现的,MySQL是一个支持多引 ...
- 事务的ACID属性,图解并发事务带来问题以及事务的隔离级别
事务的概述 事务是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源.通过将一组相关操作组 ...
- 分布式事务?咱先弄明白本地事务再说 - ACID
过去一段时间面试的同学,对于数据库事务,可以按照配置正常使用,但很多都无法讲清楚和理解数据库事务这个东西真正的意义,以及互联网兴起以后,当今数据库在ACID面前面临怎样的问题和抉择. 事务,是各大 ...
- 事务的ACID和四个隔离级别
在实际的业务场景中,并发读写引出了和事务控制的需求.优秀的事务处理能力是关系型数据库(特别是oracle等商用RDBMS)相对于正当风口的NoSQL数据库的一大亮点.但这也从另一方面说明了事务控制的复 ...
- 14.2 事务的ACID属性
14.2 事务的ACID属性正在更新内容.请稍后
- Oracle事务的ACID特性
Oracle事务的ACID特性 1.原子性(Atomicity) 事务的原子性是指事务中包含的所有操作要么都做,要么都不做,保证数据库是一致的. 例如:A帐户向B帐户划账1000,则先将A减少1000 ...
随机推荐
- MySQL进程-状态等参数详解
查看连接 mysql -uroot -p123456 -e "show processlist;" 查看正在执行的sql语句 mysql -uroot -p123456 -e &q ...
- JSONPath使用说明
# JSONPath - XPath for JSON A frequently emphasized advantage of XML is the availability of plenty t ...
- Redis发布订阅机制
1. 什么是Redis Redis是一个开源的内存数据库,它以键值对的形式存储数据.由于数据存储在内存中,因此Redis的速度很快,但是每次重启Redis服务时,其中的数据也会丢失,因此,Redis也 ...
- H5+App开发框架汇总
MUI:http://dcloudio.github.io/mui/(使用H5+app模式,号称是最接近原生,但是目前在手机和电脑浏览器无法使用) app-framework:http://app-f ...
- .3-浅析webpack源码之预编译总览
写在前面: 本来一开始想沿用之前vue源码的标题:webpack源码之***,但是这个工具比较巨大,所以为防止有人觉得我装逼跑来喷我(或者随时鸽),加上浅析二字,以示怂. 既然是浅析,那么案例就不必太 ...
- [转]NodeBB 环境搭建
本文转自:https://my.oschina.net/pauli/blog/198405 摘要: Windows 7 下面 NodeBB (https://nodebb.org/)环境搭建 ...
- Sql Server 开窗函数Over()的使用
利用over(),将统计信息计算出来,然后直接筛选结果集 declare @t table( ProductID int, ProductName ), ProductType ), Price in ...
- 如何让win2008服务器显示中文无乱码
使用Windows Server 2008 R2 IIS搭建FTP服务器时,客户端登录FTP后中文文件夹显示为乱码,应在“控制面板”-“区域和语言”中查看“当前系统区域设置”的情况. 应确保“非Uni ...
- Thinkphp 全选、反选 批量删除
完整案例 前台 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
- [android] ndk环境的搭建
C语言的编辑加运行,分两步 编译阶段 连接阶段 java语言的步骤是 转成.class文件 java的虚拟机运行 C语言在windows上==> .o中间文件 ==>.exe可执行文件 ...