大致跟mysql的数据库的事务 意思是一样的,
什么是事务?
为了确保一系列相关的数据库操作要么全部成功,要么全部失败,从而避免了数据的不一致性和部分更新等问题。
那么如数据库事务有什么区别呢?
1.非原子性 redis事务不保证所有指令同时成功或同时失败,如果其中一条命令执行失败,其他命令仍然会继续执行,而不是全部回滚。
2.单独的隔离操作和无隔离级别 执行完事务内的所有指令前不能执行其他客户端的请求。
3.排它性 redis保证事务依次执行,不会被其他命令插入
废话不多直接上指令
开始事务------结束事务
multi//开始
指令...
exec//结束
那么如果过程中你发现不想使用事务怎么办?
使用discard直接清除当前事务
有的同学会发现,上述是指令有出错的情况
那如果其中的指令有问题会出现什么情况?
1.写的指令有问题
例如写一个set k1 却不给value等,即在redis中不存在这样的命令,
首先我们得知道不管命令对错使用事务都会插入!
我们知道redis是将命令插入队列中,所以如果命令错误在执行事务时就不会执行当前事务。
2.写的没问题执行过程中出错
例如:set k1 v1
又使用 incr k1
在执行过程中发现问题后,错误的会不执行,而其他的指令不会改变
有点像编译和执行
编译发现错所有不能运行,执行发现错误是已执行部分了。
监控?
为什么要有监控?
在多线程环境中,如果别人对某数据执行修改操作,而你如果不对某个数据监控就会出现错误情况,与预期理想效果不同。
我们在执行事务前如果开启对某个数据的监控,在执行事务时如果发现监控的数据发生过修改,就会直接停止当前事务。(所有不执行)
开启
watch
结束
unwatch