首页 > 解决方案 > Redis RPUSH - 特定的返回值语义

问题描述

Redis RPUSH docs here建议返回RPUSH值为the length of the list after the push operation.

但是,我不清楚的是:

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

谢谢!

标签: redisatomic

解决方案


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

但是,当您在client上获得结果时,列表可能已经以任意方式更改,因为其他客户端可能已经推送项目、弹出项目等。因此,返回值实际上并没有告诉您任何有关到您在客户端收到它时的列表。

如果返回值与列表的状态匹配对您来说很重要,那么这意味着您有一系列想要成为原子的操作,在这种情况下,您可以使用 Redis 的事务工具。例如,如果您RPUSHLua 脚本中执行 ,则可以确定返回值表示列表的状态,因为整个脚本将作为单个原子操作执行。


推荐阅读