redis的事务
事务是查询和更新数据库中的各项数据的执行单元。
事务就是一组原子性的命令,事务中的命令要不全部成功,要不全部失败。
eg:甲向已转入300块钱,甲的账户少300,乙的账户多300,这才是一个完整的事务执行,不能甲没少,已到多了300,不符合逻辑思维。
redis执行连续的指定过程中,会被插队和干扰。
redis的事务采取批处理的方式,常用的命令如下:
1、mulit:开始事务,设定事务开启的位置,此命令执行后,后续的所有命令加入到事务中。
2.exec:执行事务,设定事务结束的位置,并执行事务,加入事务的命令并进入队列中,并没有立即执行,只是执行了exec才开始执行。
3.discard,终止当前事务的执行,(也就是说当没有exec的情况下,你discard的话,他就终止了事务。)
4.watch:监听一个key,如果在执行exec前,key被修改,终止事务的执行。
没执行exec之前,在打开一个执行如下代码
最后在exec,会发现nli(没有),这是因为终止事务的执行,监听的name被替换,导致事务中的name没有了。
注意 :如果事务中的命令执行执行无法有错误,终止事务的执行。
eg:
如果没有语法错误,而是运行中出错,那会运行正确的,错误的命令不会执行,并且执行完成的命令是不会回滚的。
eg: