上一题下一题

Redis Pipeline 为什么能够降低网络往返开销,却不能天然提供事务原子性与失败回滚?

基础版
来源:tencent高级工程师Redis Pipeline数据库事务回滚Redis命令执行原子性Redis事务
草稿该题目为草稿状态,前台公开题库中不可见。
答案解析

Redis Pipeline 本质上是一个 网络层面的批量发送优化 ,不是事务机制。

它能降低网络往返开销,是因为正常情况下客户端发送一条命令,要等 Redis 返回结果后再发送下一条,这样每条命令都有一次 RTT。Pipeline 会把多条命令连续写到 TCP 连接里,一次性发给 Redis,客户端之后再按顺序读取这些命令的响应。这样多条命令可以复用一次或少数几次网络往返,尤其在跨机房、高延迟网络下收益比较明显。

但是 Pipeline 不天然提供事务原子性,原因是它并没有改变 Redis 对命令的执行语义。Redis 收到 Pipeline 中的命令后,仍然是把它们当作一条条普通命令按顺序执行,而不是当成一个不可分割的事务单元。中间某条命令执行失败,并不会阻止后面的命令继续执行,也不会自动撤销前面已经执行成功的命令。

比如 Pipeline 里依次发送:

如果 INCR a 因为类型不匹配失败,SET a 1 可能已经成功,SET b 2 也可能继续成功执行。客户端只能在读取响应时发现某

登录后查看完整内容