redis事物控制
关于事物
事物(数据库事物)是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行redis事物与mysql事物的不同
1.与mysql等数据库不同,redis事物不提供回滚操作。
2.对于ACID特性:它不满足原子性(会部分不执行)、持久性(因为redis是在内存中、即使开启AOF,也存在命令执行一部分后,系统宕机而导致数据丢失的情况,不能恢复)、一致性(状态转移一半宕机了)。因为redis是单线程的,事务也是串行执行,所以满足隔离性。
使用
redis事务是基于先进先出队列实现的,multi之后的命令放入队列中,exec后队列中的命令一次执行。
multi 事务开始
exec 事物结束
discard 放弃事物
1:语法错误:致命的错误,事务中的所有命令都不会执行,即插入到队列时出错,队列所有的命令就都不执行了。
2:运行错误:不会影响事务中其他命令的执行,即插入队列都成功,但从队列出来运行时出错,其他命令还会执行。
watch在事物中的使用
watch命令可以multi - exec之间监控一个或多个键,在事物中一旦其中有一个键被修改(或删除),之后的事物命令就不会执行,监控一直持续到EXEC命令。
事务中的命令是在EXEC之后才执行的,EXEC命令执行完之后被监控的键会自动被UNWATCH。在事物中使用watch可以很好的监控某些数据。