Redis事务是一组命令的集合。这组命令顺序化执行而不会被其他命令插入。
Redis事务命令
| 命令 | 描述 |
|---|---|
| DISCARD | 取消事务,放弃执行 |
| EXEC | 执行事务 |
| MULTI | 标记事务的开始 |
| UNWATCH | 取消WATCH对所有key的监控 |
| WATCH | 监控所有key |
Redis事务特点
| 特点 | 说明 |
|---|---|
| 单独的隔离操作 | Redis命令执行是单线程的,在执行完事务内所有指令前无法同时执行其他客户端的请求 |
| 没有隔离级别的概念 | 在事务提交前任何指令都不会被实际执行 |
| 不保证原子性 | 不保证所有指令同时成功或者失败,无法执行到一半进行回滚 |
| 排他性 | Redis会保证一个事务内命令依次执行,不会被其他命令插入 |
具体的使用方式:
- 正常执行
MULTI redis语句... EXEC - 放弃执行
MULTI redis语句 DISCARD - 发生语法错误
假设在MULTI...EXEC中的某一条redis语句发生语法错误,则整个事务都不会执行 - 发生执行错误
假设在MULTI...EXEC中的redis语句没有语法错误,但是在执行过程中发现了错误,则除了这条语句,其他语句都正常执行。 - WATCH监控
Redis使用Watch来提供乐观锁定,类似于CAS,Redis在修改时会检测数据是否被更改,如果更改了则执行失败。手动取消监控锁使用unwatch,自动取消监控锁有两种方式:- 执行exec取消之前加的监控锁
- 当客户端丢失连接时