09.事务
1. 事务命令
| 命令 | 说明 |
|---|---|
| muitl | 开启事务命令 |
| command | 普通命令 |
| discard | 在提交前取消 |
| exec | 提交 |
注:discard只是结束本次事务,前2条语句已经执行,造成的影响仍然还在。
语句出错有两种情况: - 语法有问题,exec时报错,所有语句取消执行,没有对数据造成影响。 - 语法本身没错,但适用对象有问题(比如 zadd 操作list对象),exec之后,会执行正确的语句,并跳过有不适当的语句,对数据会造成影响,这点由程序员负责。
2. 乐观锁
redis的事务中启用的是乐观锁,只负责监测key没有被改动,如果在事务中发现key被改动,则取消事务。使用watch命令来监控一个或多个key,使用unwatch命令来取消监控所有key。
1 | # 示例 |
模拟抢票,场景:用户买一张票,扣掉100元
1 | # 在zhangsan买票过程中,在提交事务前一瞬间,有人成功买到票,ticket已经改变(即使ticket还有票),导致zhangsan抢票失败。 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Estom的博客!




