Redis 事务

RedisRedisBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在这个实验中,你将探索 Redis 事务。Redis 事务允许你将一组命令作为一个单独的、原子性的操作来执行,从而确保数据一致性。你将学习如何使用 MULTI 命令启动一个事务,将命令加入队列,然后执行或放弃该事务。你将练习在事务中设置键(key)、获取值(value)和递增计数器(counter)。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL redis(("Redis")) -.-> redis/RedisGroup(["Redis"]) redis/RedisGroup -.-> redis/access_cli("Connect Using CLI") redis/RedisGroup -.-> redis/store_string("Set String Value") redis/RedisGroup -.-> redis/fetch_string("Get String Value") redis/RedisGroup -.-> redis/increment_int("Increase Integer Value") subgraph Lab Skills redis/access_cli -.-> lab-552106{{"Redis 事务"}} redis/store_string -.-> lab-552106{{"Redis 事务"}} redis/fetch_string -.-> lab-552106{{"Redis 事务"}} redis/increment_int -.-> lab-552106{{"Redis 事务"}} end

启动 Redis 事务

在这一步中,你将学习如何使用 MULTI 命令在 Redis 中启动一个事务。Redis 事务确保一系列命令作为一个单独的、原子性的单元来执行。这意味着要么所有命令都成功,要么都不成功,从而保证数据完整性。

首先,在你的终端中使用 redis-cli 命令连接到 Redis 服务器:

redis-cli

现在你已经在 redis-cli 环境中,你可以开始一个事务。输入以下命令并按 Enter 键:

MULTI

你应该看到以下输出:

OK

这确认 Redis 已经进入事务模式。你输入的任何后续命令都将被加入队列,并在你使用 EXEC 命令时一起执行。

让我们将第一个命令加入队列。我们将设置一个名为 mykey 的键(key),其值为 myvalue。输入以下命令并按 Enter 键:

SET mykey "myvalue"

输出应该为:

QUEUED

这表明 SET 命令已成功添加到事务队列中。在我们明确告知 Redis 执行之前,它不会被执行。

记住退出 redis-cli 环境以确保命令被记录:

exit

将更多命令加入队列并执行事务

在这一步中,你将向事务队列添加更多命令,然后使用 EXEC 命令执行整个事务。

重新连接到 Redis 服务器:

redis-cli

因为我们有一个现有的事务,所以我们需要重新进入事务模式:

MULTI

现在,让我们将一个命令加入队列,以检索 mykey 的值:

GET mykey

你应该看到:

QUEUED

接下来,让我们添加另一个命令来设置一个不同的键(key),anotherkey,其值为 anothervalue

SET anotherkey "anothervalue"

输出应该为:

QUEUED

最后,让我们加入一个 INCR 命令,以递增一个名为 mycounter 的计数器(counter)。如果 mycounter 不存在,Redis 将创建它并将其初始化为 0,然后再递增:

INCR mycounter

你应该看到:

QUEUED

你现在已经在事务中排队了几个命令。要一次性执行它们,请使用 EXEC 命令:

EXEC

输出应该类似于这样:

1) OK
2) "myvalue"
3) OK
4) (integer) 1

让我们分解一下输出:

  • 1) OKSET mykey "myvalue" 命令的结果。
  • 2) "myvalue"GET mykey 命令的结果。
  • 3) OKSET anotherkey "anothervalue" 命令的结果。
  • 4) (integer) 1INCR mycounter 命令的结果。

事务中的所有命令都以原子方式执行。

记住退出 redis-cli 环境以确保命令被记录:

exit

验证事务执行

在这一步中,你将通过检索你设置的键(key)的值来验证上一个事务中的命令是否已正确执行。

重新连接到 Redis 服务器:

redis-cli

要检查这些值,请对每个键使用 GET 命令:

GET mykey
GET anotherkey
GET mycounter

你应该看到以下输出:

"myvalue"
"anothervalue"
"1"

这确认事务已成功执行,并且键的值已按预期更新。

记住退出 redis-cli 环境以确保命令被记录:

exit

使用 DISCARD 命令取消事务

在这一步中,你将学习如何使用 DISCARD 命令取消 Redis 事务。如果你决定不想执行已加入队列的命令,这将非常有用。

首先,连接到 Redis 服务器并启动一个新事务:

redis-cli
MULTI

现在,让我们将一些命令加入队列:

SET mykey "newvalue"
INCR mycounter

你应该看到每个命令的 QUEUED 响应。

现在,让我们取消事务,而不是执行它。使用 DISCARD 命令:

DISCARD

你应该看到:

OK

这确认事务已被取消,并且所有已加入队列的命令都已被丢弃。为了验证,你可以检查 mykeymycounter 的值。它们不应该已被更新。

记住退出 redis-cli 环境以确保命令被记录:

exit

总结

在这个实验中,你已经学习了如何使用 Redis 事务来原子性地执行多个命令。你练习了使用 MULTI 启动事务,将命令加入队列,使用 EXEC 执行事务,以及使用 DISCARD 取消事务。当执行复杂操作时,这些知识对于在 Redis 中保持数据一致性至关重要。