Redis RPUSH - 具体 return 值语义
Redis RPUSH - specific return value semantics
Redis RPUSH docs here提示RPUSH
的return值为the length of the list after the push operation.
但是,我不清楚的是:
- 是
RPUSH
的结果原子地进行push操作后的列表长度,(所以结果肯定是刚刚添加的最后一项的索引RPUSH
) 或...
- 是否有可能来自并发 Redis 客户端的其他
RPUSH
操作可能在 RPUSH
return 之前执行,以便您确实获得了列表的新长度,但是该长度包括来自其他 RPUSH
命令的元素?
谢谢!
操作是原子操作,所以RPUSH
的结果确实是操作后列表的长度。
但是,当您在 客户端 上获得结果时,列表可能已经以任意方式更改,因为其他客户端可能已推送项目、弹出项目等。因此,return 值实际上不会告诉您在客户端收到列表时列表的状态。
如果 return 值与列表的状态匹配对您很重要,那么这意味着您有一个 序列 的操作原子的,在这种情况下,您可以使用 Redis 的事务设施。例如,如果您在 Lua script 中执行 RPUSH
,您可以确定 return 值表示列表的状态,因为整个脚本将作为单个原子操作执行.
Redis RPUSH docs here提示RPUSH
的return值为the length of the list after the push operation.
但是,我不清楚的是:
- 是
RPUSH
的结果原子地进行push操作后的列表长度,(所以结果肯定是刚刚添加的最后一项的索引RPUSH
) 或... - 是否有可能来自并发 Redis 客户端的其他
RPUSH
操作可能在RPUSH
return 之前执行,以便您确实获得了列表的新长度,但是该长度包括来自其他RPUSH
命令的元素?
谢谢!
操作是原子操作,所以RPUSH
的结果确实是操作后列表的长度。
但是,当您在 客户端 上获得结果时,列表可能已经以任意方式更改,因为其他客户端可能已推送项目、弹出项目等。因此,return 值实际上不会告诉您在客户端收到列表时列表的状态。
如果 return 值与列表的状态匹配对您很重要,那么这意味着您有一个 序列 的操作原子的,在这种情况下,您可以使用 Redis 的事务设施。例如,如果您在 Lua script 中执行 RPUSH
,您可以确定 return 值表示列表的状态,因为整个脚本将作为单个原子操作执行.