管道和事务

了解如何使用 Redis 管道和事务

Redis 允许您将一系列命令一起批量发送到服务器。 您可以使用两种类型的批处理:

  • 管道通过发送多个命令来避免网络和处理开销 发送到服务器。然后服务器发回 包含所有响应的单一通信。有关更多信息,请参阅 Pipelining 页面 信息。
  • 事务保证所有包含的命令都将执行 完成,而不会被来自其他客户端的命令打断。 有关更多信息,请参阅 Transactions (交易) 页面。

执行管道

要在管道中执行命令,首先要创建一个管道对象 然后使用类似于 Standard 的方法向其添加命令 命令方法(例如set()get()).命令包括 buffered 的 API 中,并且仅在您调用sync()method 的 intent 方法。

与 pipeline 命令的主要区别在于它们返回Response<Type>对象,其中Type是 标准命令方法。一个Responseobject 包含有效结果 仅在管道完成执行后。您可以访问 result 使用Response对象的get()方法。

执行事务

事务的工作方式与管道类似。创建一个 transaction 对象替换为multi()command, 调用命令方法 在该对象上,然后调用 Transaction 对象的exec()方法来执行它。您可以访问结果 from 命令在事务中使用Response对象,作为 你会用管道。但是,exec()方法也 返回List<Object>值,该值包含所有结果 值(请参阅下面的更改监视键 使用结果列表的示例)。

监视键是否有更改

Redis 支持乐观锁定以避免不一致的更新 到不同的键。基本思想是监视对任何 您在处理 更新。如果监视的密钥发生更改,则必须重新启动更新 替换为 keys 中的最新数据。有关乐观锁定的更多信息,请参阅 事务

下面的代码读取一个字符串 ,它表示PATH变量,然后附加一个新的 命令路径添加到字符串中。如果观看了 key 在写入之前被另一个客户端修改,事务中止。 请注意,您应该同步调用被监视键的只读命令 通常的客户端对象(称为jedis在我们的示例中),但您仍然调用 command 对于 Transaction 对象上的事务。

对于生产用途,您通常会在 一个循环重试它,直到它成功,否则报告或记录失败。

为本页评分
返回顶部 ↑