- 一、什么是事务:
- redis 事务的本质是一组命令的集合,一个事务中所有的命令都会被序列化,在事务的执行顺序中,会安照顺序执行!
- 事务操作的命令:
- 命令行实战:
- 二、乐观锁
- 使用watch 监控 key。
- 操作成功: 单线程
- 实现乐观锁操作:多线程
事务是指一系列操作步骤,这一系列的操作步骤,要么完全地执行,要么完全地不执行。
Redis 中的事务(transaction)是一组命令的集合,至少是两个或两个以上的命令,redis 事务保证这些命令被执行时中间不会被任何其他操作打断。
redis 事务的本质是一组命令的集合,一个事务中所有的命令都会被序列化,在事务的执行顺序中,会安照顺序执行!一次性、顺序性、排他性,执行一些列的命令。
事务操作的命令:redis 事务没有隔离级别的概念。
所有的命令在事务中,并没有直接被执行!而是只有发起执行命令的时候,才会执行。(exec)
redis 单条命令是保证原子性的,但是事务不保证原子性。
● multi
语法: multi
作用:标记一个事务的开始。事务内的多条命令会按照先后顺序被放进一个队列当中。返回值:总是返回 ok
● 命令入队(…)
● exec
语法:exec
作用:执行所有事务块内的命令
返回值:事务内的所有执行语句内容,事务被打断(影响)返回 nil
命令行实战:● discard
语法:discard
作用:取消事务,放弃执行事务块内的所有命令返回值:总是返回 ok
● watch
语法:watch key [key …]
作用:监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动, 那么事务将被打断。
返回值:总是返回 ok
● unwatch
语法:unwatch
作用:取消 WATCH 命令对所有 key 的监视。如果在执行 WATCH 命令之后, EXEC 命令或 DISCARD 命令先被执行了的话,那么就不需要再执行 UNWATCH 了
返回值:总是返回 ok
- 事务的实现
● 正常执行事务
事务的执行步骤: 首先开启事务, 其次向事务队列中加入命令,最后执行事务提交
例 1:事务的执行:
1、multi : 用 multi 命令告诉 Redis,接下来要执行的命令你先不要执行,而是把它们暂时存起来 (开启事务)
2、sadd works john 第一条命令进入等待队列(命令入队)
3、sadd works rose 第二条命令进入等待队列(命令入队)
4、exce 告知 redis 执行前面发送的两条命令(提交事务)
二、乐观锁 使用watch 监控 key。悲观锁:
很悲观,认为什么时候都会出现问题,无论做什么都会加锁。
乐观锁:
很乐观,任务什么时候都不会出现问题,所以不会上锁,更新数据的时候判断一下,在此期间有人更新数据是不管的。
- 获取版本
- 更新的时候比较版本



