Redis 事务

RedisBeginner
立即练习

介绍

在本实验中,你将探索 Redis 事务。Redis 事务允许你将一组命令作为单个原子操作执行,从而确保数据一致性。你将学习如何使用 MULTI 命令开始事务,排队命令,然后执行或放弃事务。你将练习在事务中设置键、获取值和递增计数器。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 96%。获得了学习者 89% 的好评率。

开始 Redis 事务

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

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

redis-cli

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

MULTI

你应该会看到以下输出:

OK

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

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

SET mykey "myvalue"

输出应该是:

QUEUED

这表明 SET 命令已成功添加到事务队列中。它不会被执行,直到我们明确指示 Redis 执行。

请保持 redis-cli 环境打开,以进行下一步。

排队更多命令并执行事务

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

现在,让我们排队一个用于检索 mykey 值的命令:

GET mykey

你应该看到:

QUEUED

接下来,让我们添加另一个命令,将 anotherkey 设置为值 anothervalue

SET anotherkey "anothervalue"

输出应该是:

QUEUED

最后,让我们排队一个 INCR 命令来递增一个名为 mycounter 的计数器。如果 mycounter 不存在,Redis 将在递增之前创建它并将其初始化为 0:

INCR mycounter

你应该看到:

QUEUED

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

EXEC

输出应该类似于:

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

让我们分解一下输出:

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

事务中的所有命令都已原子地执行。

请保持 redis-cli 环境打开,以进行下一步。

验证事务执行结果

在本步骤中,你将通过检索你设置的键的值来验证先前事务中的命令是否已正确执行。

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

GET mykey
GET anotherkey
GET mycounter

你应该看到以下输出:

"myvalue"
"anothervalue"
"1"

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

请保持 redis-cli 环境打开,以进行下一步。

使用 DISCARD 取消事务

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

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

MULTI

现在,让我们排队一些命令:

SET mykey "newvalue"
INCR mycounter

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

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

DISCARD

你应该看到:

OK

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

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

exit

总结

在本实验中,你学习了如何使用 Redis 事务原子地执行多个命令。你练习了使用 MULTI 开始事务,排队命令,使用 EXEC 执行事务,以及使用 DISCARD 取消事务。在执行复杂操作时,这些知识对于在 Redis 中维护数据一致性至关重要。