事务
Redis事务本质:一组命令的集合!一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行。
一次性、顺序性、排他性。
Redis事务没有隔离级别的概念,所有的命令在事务中,并没有直接执行!Redis单条命令保证原子性,但是事务不保证原子性。
Redis的事务:
- 开启事务(multi)
- 命令入队(...)
- 执行事务(exec)
正常执行事务:
放弃事务(DISCRD):
编译型异常(代码有问题,命令有错),事务中的命令都不会执行
运行时异常(如果事务队列中存在语法错误,那么执行命令的时候,其它命令可以正常执行的(没有原子性)
监控(Watch: 事务执行成功监控自动取消掉)
悲观锁:
认为每次访问共享资源时会发生冲突,每次对临界资源的操作都必须加锁,以保证临界区的程序同一时间只能有一个线程在执行。
乐观锁:
认为对共享资源的访问没有冲突,线程可以不停的执行,在此期间如果有人修改过这个数据,记录version.(在MySQL中,先获取version,更新的时候比较version)
Redis 监视:
实例1:
实例2(两个线程进行操作):
如果发现事务执行失败:
《bliibili UP主-狂神说Java》