62

当我们在 Redis 中使用事务时,它基本上将事务中的所有命令流水线化。并且当 EXEC 被触发时,所有的命令都会一起执行,从而始终保持多个命令的原子性。

这不和流水线一样吗?

流水线和事务有何不同?另外,为什么 Redis 的单线程特性不够用?为什么我们明确需要流水线/事务?

4

1 回答 1

92

流水线主要是一种网络优化。它本质上意味着客户端缓冲一堆命令并将它们一次性发送到服务器。这些命令不保证在事务中执行。这样做的好处是为每个命令节省了网络往返时间。

Redis 是单线程的,因此单个命令始终是原子的,但是来自不同客户端的两个给定命令可以按顺序执行,例如在它们之间交替执行。

然而,Multi/exec 确保在 multi/exec 序列中的命令之间没有其他客户端正在执行命令。

于 2015-03-30T02:08:52.393 回答