管道和事务
了解如何使用 Redis 管道和事务
Redis 允许您将一系列命令一起批量发送到服务器。 您可以使用两种类型的批处理:
- 管道通过发送多个命令来避免网络和处理开销 发送到服务器。然后服务器发回 包含所有响应的单一通信。有关更多信息,请参阅 Pipelining 页面 信息。
- 事务保证所有包含的命令都将执行 完成,而不会被来自其他客户端的命令打断。 有关更多信息,请参阅 Transactions (交易) 页面。
执行管道
要在管道中执行命令,首先要创建一个管道对象
然后使用类似于 Standard 的方法向其添加命令
命令方法(例如set()
和get()
).命令包括
buffered 的 API 中,并且仅在您调用sync()
method 的 intent 方法。
与 pipeline 命令的主要区别在于它们返回Response<Type>
对象,其中Type
是
标准命令方法。一个Response
object 包含有效结果
仅在管道完成执行后。您可以访问
result 使用Response
对象的get()
方法。
执行事务
事务的工作方式与管道类似。创建一个
transaction 对象替换为multi()
command, 调用命令方法
在该对象上,然后调用 Transaction 对象的exec()
方法来执行它。您可以访问结果
from 命令在事务中使用Response
对象,作为
你会用管道。但是,exec()
方法也
返回List<Object>
值,该值包含所有结果
值(请参阅下面的更改监视键
使用结果列表的示例)。
监视键是否有更改
Redis 支持乐观锁定以避免不一致的更新 到不同的键。基本思想是监视对任何 您在处理 更新。如果监视的密钥发生更改,则必须重新启动更新 替换为 keys 中的最新数据。有关乐观锁定的更多信息,请参阅 事务。
下面的代码读取一个字符串
,它表示PATH
变量,然后附加一个新的
命令路径添加到字符串中。如果观看了
key 在写入之前被另一个客户端修改,事务中止。
请注意,您应该同步调用被监视键的只读命令
通常的客户端对象(称为jedis
在我们的示例中),但您仍然调用 command
对于 Transaction 对象上的事务。
对于生产用途,您通常会在 一个循环重试它,直到它成功,否则报告或记录失败。