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取消之前加的监控锁
- 当客户端丢失连接时