【问题标题】:Redis RPUSH - specific return value semanticsRedis RPUSH - 特定的返回值语义
【发布时间】:2021-06-04 06:18:52
【问题描述】:

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

但是,我不清楚的是:

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

谢谢!

【问题讨论】:

  • AFAIK,Redis 是单线程的,因此在完全完成第一个 RPUSH 服务之前,它无法开始服务来自另一个客户端的另一个请求。

标签: redis atomic


【解决方案1】:

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

但是,当您在 客户端 上获得结果时,列表可能会以任意方式发生变化,因为其他客户端可能已经推送项目、弹出项目等。所以返回值确实当您在客户端收到列表时,它不会告诉您任何有关列表状态的信息。

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

【讨论】:

    猜你喜欢
    • 2017-05-12
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多