管道和事务
了解如何使用 Redis 管道和事务
Redis 允许您将一系列命令一起批量发送到服务器。 您可以使用两种类型的批处理:
- 管道通过发送多个命令来避免网络和处理开销 发送到服务器。然后服务器发回 包含所有响应的单一通信。有关更多信息,请参阅 Pipelining 页面 信息。
- 事务保证所有包含的命令都将执行 完成,而不会被来自其他客户端的命令打断。 有关更多信息,请参阅 Transactions (交易) 页面。
执行管道
要在管道中执行命令,首先要创建一个管道对象
然后使用类似于 Standard 的方法向其添加命令
命令方法(例如Set()
和Get()
).命令包括
buffered 的 API 中,并且仅在您调用Exec()
method 的 intent 方法。
与 pipeline 命令的主要区别在于它们的返回
值仅在管道完成执行后才包含有效结果。
您可以使用Val()
method 而不是Result()
(请注意,错误由Exec()
method 而不是
than 通过各个命令)。
您还可以使用Pipelined()
方法。
这将在回调函数中执行管道命令,您
provide 并调用Exec()
在它返回后自动返回:
执行事务
事务的工作方式与管道类似。创建一个
transaction 对象替换为TxPipeline()
method, call command methods
在该对象上,然后调用 Transaction 对象的Exec()
方法来执行它。您可以访问结果
from 命令,在事务完成后使用Val()
方法。
还有一个TxPipelined()
方法,该方法以类似的方式工作
自Pipelined()
上述:
监视键是否有更改
Redis 支持乐观锁定以避免不一致的更新 到不同的键。基本思想是监视对任何 您在处理 更新。如果监视的密钥发生更改,则必须重新启动更新 替换为 keys 中的最新数据。有关乐观锁定的更多信息,请参阅 事务。
下面的代码读取一个字符串
,它表示PATH
变量,然后附加一个新的
命令路径添加到字符串中。如果观看了
key 在写入之前被另一个客户端修改,事务中止。
这Watch()
method 接收一个回调函数,您可以在其中执行
命令。在此回调的 body 中,您可以执行
read-only 命令
(称为rdb
在我们的示例中)并立即收到结果。启动
事务本身通过调用TxPipeline()
或TxPipelined()
在Tx
对象传递给回调。Watch()
还接收一个或多个string
参数,这些参数表示所需的键
观看。
对于生产用途,您通常会在 一个循环重试它,直到成功,否则报告或记录失败: