如何在事务中进行多次写操作
事务性写操作指南
先决条件
- 安装
etcd和etcdctl。 - 运行中的
etcd集群。
术语
以下是本文中使用的部分关键术语的定义,这些术语将在 Example 示例中出现。
| 术语 | 定义 |
|---|---|
| etcdctl | 用于与 etcd 服务器交互的命令行工具。 |
txn
命令 | txn 命令是“事务”的缩写。它从标准输入读取多个 etcd 请求,并将其作为单个原子事务执行。事务包含一组条件、一组在所有条件均为真时执行的请求,以及一组在任一条件为假时执行的请求。有关更多信息,请参阅 etcdctl 键值命令
。 |
compare | 事务(txn)中的 compare 子句用作条件检查,用于判断事务操作是否应继续执行。它确保仅当键值存储的当前状态符合预期条件时才应用变更,从而维护数据一致性,并在并发环境中防止冲突。要了解该命令的结构,请参阅下方 执行事务
章节。 |
事务
txn 以事务方式处理所有请求:
事务允许在 etcd 中原子性地执行多个操作,确保所有操作均被应用或全部不被应用。这在执行相关更新时对于维护数据一致性至关重要。有关事务的更多信息,请参见 API 文档 。
示例
考虑一种场景:需要在单个事务中更新用户的电子邮件和电话号码。这可确保两项更新同时生效。

0. 使用的变量和标志
| 变量 |
|---|
/users/{<user_id>/email : 表示用户电子邮件地址的 etcd 键。 |
/users/<user_id>/phone : 表示用户电话号码的 etcd 键。 |
| 标志 |
--interactive
: 用于允许手动输入事务数据的标志。 |
1. 初始化数据设置
首先,创建一个带有初始数据的用户。
2. 执行事务
在单个事务中更新用户的电子邮件和电话号码。
- Compare:检查当前邮箱是否为 “old.address@johndoe.com "。这确保事务仅在数据符合预期时才继续执行。
- Success:如果比较结果为真,更新邮箱和电话号码。
- Failure:如果比较失败,获取当前邮箱以了解事务未执行的原因。
重要考虑事项
- 原子性:事务确保电子邮件和电话号码同时更新。如果初始条件(比较)不满足,则不会应用任何更新。
- 一致性:使用事务可维持数据一致性,尤其是在处理多个相关更新时。
- 避免在单个事务中对同一键多次写入:在单个事务中不要对同一键写入多个值,这可能导致意外结果。每个键在事务中应仅更新一次。