1. 概述:
1. 说明
-
Redis事务本质: 一组命令的集合!
-
一个事务的所有命令都会被序列化, 在事务执行过程中, 会按照顺序执行
-
Redis 事务没有隔离级别的概念
-
所有的命令在事务中, 并没有直接被执行, 只有发起执行命令的时候才会被执行
-
Redis单条命令式保证原子性的, 但是事务不保证原子性
2. 特点
- 一次性
- 顺序性
- 排他性
2. Redis的事务
-
开启事务
MULTI
-
命令入队
-
执行事务
exec
-
放弃事务
DISCARD
3 异常
1. 编译型异常
- 代码有问题, 命令有错
- 事务中所有的命令都不会被执行
- 代码
2. 运行时异常
如果事务队列中存在与发行错误, 那么执行命令的时候, 其他命令可以正常执行
- 代码
4. 监控
1. 悲观锁
很悲观, 认为什么时候都会出问题, 无论做什么都会加锁
2. 乐观锁
很乐观, 认为什么时候都不会出问题, 所以不会上锁.
更新数据的时候会判断一下, 在此期间是否有认为修改过这个数据.
- 获取version
- 更新的时候比较version
3. 乐观锁案例
- 单线程
- 多线程
使用watch可以当做Redis的乐观锁操作.
- 先监控
- 插入一个新的线程, 并修改监控的内容
- 执行事务失败
- 如果事务执行失败, 则先解锁
unwatch
, 然后再重新监视watch
- 先监控