事务从开始到结束,分为三个阶段:
1)事务开始
2)命令入队
3)事务执行(或者放弃)
相关命令:multi,exec,discard,watch。
multi命令将从非实物状态切换为事务状态。
watch是一个乐观锁。在exec执行之前,可利用watch监视一些任意数量的key,如果在事务前,发现至少一个key发生了修改,那么将拒绝执行此事务。
从事务的几个特点论述:
1)原子性:将多个事务当作一个整体,要么都做,要么都不做。
redis不支持回滚(与关系型数据库最大的不同),即使队列中某个命令出现错误(比如某个命令的参数错误),也会继续执行,这样执行后的结果是一些命令成功了,一些命令失败了。
2)一致性:执行事务前数据库是一致的,执行之后,无论成败,数据库也是一致的。
一致性描述了数据符合数据库本身的定义和需求,没有包含非法或者无效的错误数据。
3)隔离性:数据库中有多个事务并发执行时,事务之间不会互相影响,并且在并发状态下执行的事务与串行执行的事务产生的结果完全相同。
Redis是单线程,而且事务不会中断。因此,事务总是以串行的方式运行,所以具有隔离性。
4)持久性:当一个事物执行完毕时,执行事务所得到的结果将保存到永久性存储介质中,即使服务器在事务执行完毕后停机,执行事务所得到结果不会丢失。
Redis的事务持久化由持久化模式决定。
当服务器在AOF模式下,且appendsync选项的值为always的时候,程序总是在执行命令之后调用同步函数(sync),将命令数据真正地保存到硬盘里。这种配置下的事务满足持久性,其他场景不满足。
网友评论