文章目录
- 事务
- Redis事务 vs 数据库事务
- 常用命令
- 总结
事务
一个队列中、一次性、顺序性、排他性执行一系列命令
官网https://redis.io/docs/interact/transactions/
Redis事务 vs 数据库事务
概述 | 详述 |
---|---|
1、单独的隔离操作 | Redis的事务仅仅是保证事务里的操作会被连续独占的执行,redis命令执行是单线程架构,在执行完事务内所有指令前是不可能再去同时执行其他客户端的请求的 |
2、没有隔离级别的概念 | 因为事务提交前任何指令都不会被实际执行,也就不存在”事务内的查询要看到事务里的更新,在事务外查询不能看到”这种问题了 |
3、不保证原子性 | Redis的事务不保证原子性,也就是不保证所有指令同时成功或同时失败,只有决定是否开始执行全部指令的能力,没有执行到一半进行回滚的能力 |
4、排它性 | Redis会保证一个事务内的命令依次执行,而不会被其它命令插入 |
常用命令
- 正常执行
MULTI
EXEC
- 放弃事务
MULTI
DISCARD
-
全体连坐
在执行前命令检查发现错误无法进入队列,会直接不执行
-
冤头债主
在执行前命令检查没有发现错误进入队列,运行出现异常,能成功的命令执行成功,错误命令报错,无法回滚
-
watch监控
乐观锁类似CAS
watch命令是一种乐观锁的实现,Redis在修改的时候会检测数据是否被更改,如果更改了,则执行失败第一个窗口蓝色框第5步执行结果返回为空,也就是相当于是失败
总结
- 开始:以MULTI开始一个事务
- 入队:将多个命令入队到事务中,接到这些命令不会立即执行,放到等待执行事务队列
- 执行:由EXEC命令触发事务