摘要:本文介绍了Redis的事务。
环境
Windows 10 企业版 LTSC 21H2
Redis 7.4.8
1 概述
Redis的事务与传统关系型数据库的事务不同,命令不会立即执行,所以没有回滚和隔离级别的概念,可以批量执行或者批量取消。
2 特点
事务特点:
- 事务队列:Redis的事务不会在输入命令后立即执行,而是使用队列存放将要执行的命令。
- 不支持回滚:Redis的事务不支持回滚,在执行事务前可以取消事务,一旦执行事务后就会提交,不能回滚。
- 无隔离级别:Redis的事务没有隔离级别,在执行事务前其他客户端看到的是当前数据,仍然可以修改数据。
- 不保证原子性:Redis的事务不能保证原子性,如果在入队时没有发生错误,即使在执行时发生错误,其他命令仍然会继续执行。
3 原理
工作原理:
- 开始:通过
MULTI命令标识事务开始。 - 入队:将要执行的命令入队,事务队列会按顺序执行。
- 结束:通过
EXEC命令执行事务,通过DISCARD命令取消事务。
常见错误:
- 入队错误:如果在入队时发生错误,比如语法错误,所有命令都不会执行。
- 执行错误:如果在执行时发生错误,比如类型错误,正常命令仍然会执行。
- 监视错误:如果在监视键发生错误,比如键被修改,会强制取消事务。
4 使用
4.1 命令
命令:
MULTI:开始一个事务。EXEC:执行事务,按顺序执行事务队列中的所有命令。DISCARD:取消事务,清空事务队列。WATCH key ... key:监视一个或多个键,当这些键被其他客户端修改时,执行事务会强制改为取消事务。UNWATCH:取消所有键的监视,使用EXEC命令和DISCARD命令自动执行UNWATCH命令。
4.2 示例
正常事务:
1 | 127.0.0.1:6379> GET user |
取消事务:
1 | 127.0.0.1:6379> GET user |
监视键:
1 | 127.0.0.1:6379> GET user |
条