redis事务以及watch监视
redis事务:一次执行多个命令,相当于一个命令集合,按顺序执行,不许加塞。
mulit:开启事务,命令入队。
exec:通过exec查看队列中的语句结果。
discard:放弃事务操作。
watch:开启监控,监控的key如果被其他线程更改,当前操作会失败,语句为;watch key1 key2 (可同时监控多个key)
开启multi后,指令变为入队,所有命令都会入队,执行exec后拿到结果。
当multi开启后,如果出现严重的逻辑问题,那么队列中的所有命令全部失效,直到执行到exec。
如果出现比较轻微的逻辑问题,执行exec后,部分会更改,出错的语句会提示更改失败。
所以:redis执行部分事务。
执行discard后关闭事务,但如果没提交,队列中的操作全部命令失效。
watch:相当于给redis的key上了一把乐观锁。
mysql:乐观锁:mysql乐观锁实际是字段后加version字段,当同时拿到该行的消息后,先提交的数据version(版本)字段会加一,如果后面的人提交,发现版本号不一致,会提示错误。
悲观锁:表锁,行锁,读锁,写锁。
对key开启监控后,启用multi事务,防止加塞,如果中途有加塞,那么本次事务失败。
演示:
1.当前同时启动两个redis。
2.对当前字段test进行watch监控并开启事务。
3.这是另一个redis开始操作test。
4.在对当前开启监控test的数据库进行操作。
结论:执行exec后回复nil,说明当前对test操作失败。
如果不需要再监控执行unwatch。
取消监控执行unwatch。