抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

摘要:本文介绍了Redis的事务。

环境

Windows 10 企业版 LTSC 21H2
Redis 7.4.8

1 概述

Redis的事务与传统关系型数据库的事务不同,命令不会立即执行,所以没有回滚和隔离级别的概念,可以批量执行或者批量取消。

2 特点

事务特点:

  • 事务队列:Redis的事务不会在输入命令后立即执行,而是使用队列存放将要执行的命令。
  • 不支持回滚:Redis的事务不支持回滚,在执行事务前可以取消事务,一旦执行事务后就会提交,不能回滚。
  • 无隔离级别:Redis的事务没有隔离级别,在执行事务前其他客户端看到的是当前数据,仍然可以修改数据。
  • 不保证原子性:Redis的事务不能保证原子性,如果在入队时没有发生错误,即使在执行时发生错误,其他命令仍然会继续执行。

3 原理

工作原理:

  1. 开始:通过MULTI命令标识事务开始。
  2. 入队:将要执行的命令入队,事务队列会按顺序执行。
  3. 结束:通过EXEC命令执行事务,通过DISCARD命令取消事务。

常见错误:

  • 入队错误:如果在入队时发生错误,比如语法错误,所有命令都不会执行。
  • 执行错误:如果在执行时发生错误,比如类型错误,正常命令仍然会执行。
  • 监视错误:如果在监视键发生错误,比如键被修改,会强制取消事务。

4 使用

4.1 命令

命令:

  • MULTI:开始一个事务。
  • EXEC:执行事务,按顺序执行事务队列中的所有命令。
  • DISCARD:取消事务,清空事务队列。
  • WATCH key ... key:监视一个或多个键,当这些键被其他客户端修改时,执行事务会强制改为取消事务。
  • UNWATCH:取消所有键的监视,使用EXEC命令和DISCARD命令自动执行UNWATCH命令。

4.2 示例

正常事务:

cmd
1
2
3
4
5
6
7
8
9
10
11
127.0.0.1:6379> GET user
张三
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> SET user 李四
QUEUED
127.0.0.1:6379(TX)> EXEC
OK
127.0.0.1:6379> GET user
李四
127.0.0.1:6379>

取消事务:

cmd
1
2
3
4
5
6
7
8
9
10
11
127.0.0.1:6379> GET user
张三
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> SET user 李四
QUEUED
127.0.0.1:6379(TX)> DISCARD
OK
127.0.0.1:6379> GET user
张三
127.0.0.1:6379>

监视键:

cmd
1
2
3
4
5
6
7
8
9
10
11
12
13
127.0.0.1:6379> GET user
张三
127.0.0.1:6379> WATCH user
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> SET user 李四
QUEUED
127.0.0.1:6379(TX)> EXEC
OK
127.0.0.1:6379> GET user
李四
127.0.0.1:6379>

评论