事务:串联多个命令防止别的命令插队
redis事务是一个单独的隔离操作,事务中所有的命令都会序列化,按顺序的执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
redis事务
组队阶段:输入Multi开始组队,接下来的命令都会进入队列,先不执行。
执行阶段:当输入Exec时,命令依次执行。
放弃组队:也可以通过discard来放弃组队
示例:正常执行 Multi--Exec
示例:放弃组队 Multi--discard
事务的错误处理
情况一:在组队时某个命令出现了错误,那么执行时所有队列都会被取消
情况二:如果执行阶段某个命令报错,则只有报错的命令不执行,其他命令都会执行,不会回滚。
悲观锁和乐观锁
事务冲突问题举例:
一个请求想给金额减8000;(前女友)
一个请求想给金额减5000;(女友)
一个请求想给金额减1000;(你自己)
悲观锁
每次拿数据的时候都认为别人会修改,所以每次拿到数据之后就会上锁。操作之前先上锁,这样别人就不能操作了。
乐观锁
每次拿数据的时候很乐观,认为别人不会修改,所以不会上锁。谁第一次操作要把数据更新的同时更新本版号,第二个人改数据之前去比较版本号。redis就是使用check-and-set机制实现事务的。