事务
redis单条命令是保证原子性的,但是redis事务是不保证原子性的
redis事物本质:是一组命令的集合!一个事务的所有命令都要被序列化,在事务执行过程中,会按照顺序执行!
一次性,顺序性,排他性(不允许被干扰),执行一系列的命令
redis事务没有隔离级别的概念
所有命令在事务中并没有直接被执行,只有发起执行命令的时候才会执行!Exec
redis事务:
开启事务(multi)
命令入队(........)
执行事务(exec)
放弃事务(discard)
编译型异常:(命令有错,代码有问题)事务中所有命令都不会被执行
运行时异常:其他命令可以正常执行,错误命令抛出异常
任务队列中有的人错了,依旧可以执行
redis不保证原子性
监控!watch
悲观锁:
- 无论做什么都会加锁
乐观锁:
- 所以不会加锁,判断一下在此期间是否有人修改
- 获取version
- 更新的时候比较version
例:watch money
另外一个线程去修改我们的值,这个时候就会导致事务执行失败
unwatch 解锁
watch money 重新加锁
如果失败重新获取锁