From a56a4ae725db7a1cddc858d87f5909e12b269feb Mon Sep 17 00:00:00 2001 From: StayHungryPlease <128032810+StayHungryPlease@users.noreply.github.com> Date: Wed, 30 Sep 2026 10:36:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=A4=E5=A4=84=E8=A1=A8?= =?UTF-8?q?=E8=BF=B0=20Update=20Redis=20transaction=20explanation=20in=20d?= =?UTF-8?q?ocumentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 第一个点:“不满足原子性和持久性”太绝对,建议改成“不提供传统关系型数据库意义上的完整事务原子性和持久性保障”。 Redis官方文档明确表示,事务中的所有命令会被序列化并顺序执行,其他客户端的请求不会在事务执行中间被处理。这确保了命令作为一个隔离的单元连续执行。 即redis具有原子性但没有关系型数据库那种完整的 ACID 原子性。 第二个点:“每条命令都会与 Redis 服务器进行网络交互”——这个说法不准确。 这很容易误导让人理解为: 客户端 → SET 服务器 → 执行 客户端 → SET 服务器 → 执行 客户端 → INCR 服务器 → 执行 实际上,事务是: 客户端 → MULTI 客户端 → SET 客户端 → SET 客户端 → INCR 客户端 → EXEC MULTI 后面的命令并不会立即执行,而是在 Redis 服务端排队。 真正执行是在 EXEC。 所以网络上确实涉及多条命令请求,但不能理解成: 每条命令都经历一次“发送 → 执行 → 返回 → 再发送下一条”的完整交互。 --- docs/database/redis/redis-questions-02.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/database/redis/redis-questions-02.md b/docs/database/redis/redis-questions-02.md index b8327d82187..64c2f3abfdf 100644 --- a/docs/database/redis/redis-questions-02.md +++ b/docs/database/redis/redis-questions-02.md @@ -20,9 +20,9 @@ head: Redis 事务实际开发中使用的非常少,功能比较鸡肋,不要将其和我们平时理解的关系型数据库的事务混淆了。 -除了不满足原子性和持久性之外,事务中的每条命令都会与 Redis 服务器进行网络交互,这是比较浪费资源的行为。明明一次批量执行多个命令就可以了,这种操作实在是看不懂。 +Redis 事务不提供传统关系型数据库事务中的失败回滚机制,其持久性则依赖 Redis 自身的持久化机制。事务中的一整条命令会与 Redis 服务器进行网络交互,即事务中的命令会先在服务端排队,等执行 EXEC 时再按照顺序连续执行。 -因此,Redis 事务是不建议在日常开发中使用的。 +Redis 事务是不建议在日常开发中使用的。 ### 如何使用 Redis 事务?