Redis-03-事务和乐观锁
3. 事务与乐观锁
3.1 Redis事务
- 事务的概念
- 事务本质上就是一组命令一起执行
- 和传统事务的ACID原则相比,Redis并不保证事务的原子性,同时Redis也没有隔离级别的概念
- Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
- 批量操作在发送 EXEC 命令前被放入队列缓存。
- 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
- 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
- 一个事务从开始到执行会经历以下三个阶段
- 开始事务(MULTI)
- 命令入队
- 执行事务(EXEC)
PS. 虽然Redis的命令都是原子性的,但是Redis并不保证事务的原子性
3.2 乐观锁
乐观锁与悲观锁
- 悲观锁
- 它总是认为获取到的所有数据都是不正确的,所以在获取之前,它会严格的去上锁,依次保证正确性
- 乐观锁
- 它是非常乐观的,它认为它拿到的数据都是正确的,所以它在获取的时候不会去申请锁,锁住资源,因此性能非常优秀
- CAS(Compare And Swap)是乐观锁实现的重要机制。它的核心理念如下
- 通过版本号来判断获取到的内容是否被修改过
Redis的乐观锁
- 命令
WATCH key
,监控keyUNWATCH key
,放弃监控key
- 在事务执行完成之后,Redis会自动
UNWATCH
- 如果在事务执行的时候,被
WATCH
的值发生了改变,那么Redis事务不会执行,并会返回通知消息告知