Redis事务
Redis中事务可以一次执行多个命令,是一组命令的集合,一个事务中所有的命令都会被序列化,在事务的执行过程中,会按照顺序串行化执行队列中的命令
Redis是一次性,顺序性,排他性的执行一个队列中的一系列命令
Redis不保证原子性
Redis中,单条命令的执行是原子性,但事务是不保证原子性,而且没有回滚的概念,事务中任意的命令执行失败,其他的命令是可以执行的
Redis中的事务是没有隔离级别的
事务命令
事务的执行过程:分成三个步骤
开始事务:multi
命令入队
执行事务:exec
所有的命令的事务中,并没有直接被执行,只有发起执行事务的命令时才会正常执行
正常执行
exec 正常提交事务
放弃事务
discard:放弃事务队列运行
编译时异常
如果命令错误,即编译时异常,事务中所有的命令都不会被执行
执行时异常
执行时异常,如果队列中存在错误的语法,执行命令的时候,其他的命令可以正常执行,错误的命令抛出异常
watch
监视一个或者多个key,如果事务在执行之前这个key被其他的命令改动,那么事务会被打断
可以当做乐观锁使用
正常情况下
使用watch当做乐观锁使用
使用watch监视Money,在窗口1监视money,并开始事务,在窗口2上对money做了修改,在窗口1执行事务时会执行失败
窗口二:
窗口一: