事务本质:
一组命令的集合,一个事务所有命令都会被序列化,在事务执行过程中,都会按顺序执行。
一次性、顺序、排他性。
(1)redis 单条命令保存原子性,但是事务不保证原子性。
(2)没有隔离级别的概念。
(3)所有的命令在事务中,并没有直接被执行,只有发起执行命令的时候才会执行。Exec
redis事务
开启事务:
· 开启事务(multi)
· 命令入队(数组操作部分)
· 执行事务(exec)
提示:执行完事务,事务就没了,如果还需要事务,必须重新开启。
放弃事务:
discard
之前添加到列队中的命令都不会生效!
悲观锁
很悲观,认为什么时候都会出现问题,无论什么时候都会加锁。
乐观锁
· 很乐观,认为什么时候都不会出现问题,所以不会上锁。更新数据的时候会判断下,在此期间是否有人更改过这条数据。
· 每次更新的时候,都会获取version。
· 然后比较version。
开启乐观锁 - watch key,如果发现事务执行失败,需要先解锁 - unwatch key,然后在去watch key监视