2.Redis 事务
Redis 事务
redis的事务和mysql的事务不同
- mysql事务:acid
- 原子性 (Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
==而redis的事务本质就是一组命令的集合redis只保证单条命令的原子性==
- redis事务:
- 一次性
- 顺序性
- 排他性
redis事务使用:
- 开启事务(multi)
- 命令(...)
- 执行事务(exec)\ 放弃事务(discard)
==tips:==
-
==编译型异常(代码报错),事务中的所有命令都不会执行==
-
==运行时异常(类似1 / 0),会跳过错误的命令 后续命令也会执行==
乐观锁
乐观锁就是 :很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,**可以使用版本号(Version)**等机制。
例如:
- 小王账户中有10000元,小王的前女友在操作的时候,先给数据加上一个字段version(版本号),例如第一次操作的时候版本号为 V1.0,小王的现任女友和小王都可以得到 V1.0版本的数据。由于小王的前女友手速非常快,先购买了苹果手机,账户减去8000元,余额2000元,此时数据库在修改数据的时候,同时修改数据对应的版本号为 V 1.1。此时,小王的现女友和小王进行购买的时候,先会去检查下当前的数据版本号与数据库中的版本号是否一致,版本号一致进行操作,不一致无法进行操作。
==redis 支持使用乐观锁来配合事务使用==
- 在执行事务之前 先输入
watch {key}
来监视{key} 类似获得{key}的version- 如果不再去执行,需要取消监视,输入
unwatch {key}
来取消监视 - 如果在执行 WATCH 命令之后,且开启事务后,
EXEC
命令或DISCARD
命令先被执行了的话,那么就不需要再执行UNWATCH
了。
- 如果不再去执行,需要取消监视,输入
本文链接:
/archives/2.redis-shi-wu
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
MianJu —— 这只是一个 Title 而已~!
喜欢就支持一下吧