Redis RPUSH - 具体 return 值语义

Redis RPUSH - specific return value semantics

Redis RPUSH docs here提示RPUSH的return值为the length of the list after the push operation.

但是,我不清楚的是:

  1. RPUSH的结果原子地进行push操作后的列表长度,(所以结果肯定是刚刚添加的最后一项的索引RPUSH) 或...
  2. 是否有可能来自并发 Redis 客户端的其他 RPUSH 操作可能在 RPUSH return 之前执行,以便您确实获得了列表的新长度,但是该长度包括来自其他 RPUSH 命令的元素?

谢谢!

操作是原子操作,所以RPUSH的结果确实是操作后列表的长度。

但是,当您在 客户端 上获得结果时,列表可能已经以任意方式更改,因为其他客户端可能已推送项目、弹出项目等。因此,return 值实际上不会告诉您在客户端收到列表时列表的状态。

如果 return 值与列表的状态匹配对您很重要,那么这意味着您有一个 序列 的操作原子的,在这种情况下,您可以使用 Redis 的事务设施。例如,如果您在 Lua script 中执行 RPUSH,您可以确定 return 值表示列表的状态,因为整个脚本将作为单个原子操作执行.