事务
就是一个命令执行的队列,将一系列预定命令包装成一个整体(一个队列)。执行的时候,依次按照添加顺序依次执行,中间不会被打断或者干扰。
事务的基本操作
就是将从multi开始的后面的命令加到队列中,不执行,等遇到exec时,开始执行队列命令。
输入multi代表开始。
然后后面输入的命令会返回queued。
然后输入exec。
然后开始输出队列中每个任务的结果。
如下图。
如果事务有问题,那么通过一个命令来取消。
命令:discard
类似回滚。
事务的工作流程
discard是直接销毁这个队列,而exec是执行完队列中的事务才销毁队列的。
错误命令
如果定义的过程中,有命令错误,那么这个队列就会没有了。
已经执行完的命令不会回滚的,程序员需要自己在代码中实现回滚的!
事务:锁
也就是说可以对key增加一个监控,也就是锁。如果执行exec前key发生变化了,那么就不执行操作了。
watch 和 定义事务之间是可以 进行其他操作的。
在执行exec前,通过另一个客户端 set name 修改name的值,然后再回车exec,就会返回nil。也就是执行不了了。
同时需要注意的是,在事务里面不能执行watch。
unwatch 就是取消监控。
分布式锁
监控的是数据,数据会改变的,而不是监控别人能不能改这个值,所以应该用分布式锁。
也就是说,当前的人使用的时候,锁会使得别人不能使用。
操作完毕再用del删掉就可以了。
类似同步锁,那么就是对于多客户端就可以使得别人操作不了。
但是这个方案是一个设计概念,有风险性。
因为锁是客户自己加的,也是他自己删掉的,那么如果客户端忘记了解锁,那么风险就很大了。
那么可以设置一些后手,就是加时效,这样到点不释放,就可以直接释放掉这个锁了。