redis - Redis RPUSH - 特定的返回值语义
问题描述
Redis RPUSH docs here建议返回RPUSH
值为the length of the list after the push operation.
但是,我不清楚的是:
- 是原子
RPUSH
push操作后列表长度的结果,(所以结果肯定是刚刚添加的最后一项的索引)或者...RPUSH
RPUSH
是否有可能在返回之前执行来自并发 Redis 客户端的其他操作RPUSH
,以便您确实获得了列表的新长度,但该长度包括来自其他RPUSH
命令的元素?
谢谢!
解决方案
操作是原子的,所以结果RPUSH
确实是操作后列表的长度。
但是,当您在client上获得结果时,列表可能已经以任意方式更改,因为其他客户端可能已经推送项目、弹出项目等。因此,返回值实际上并没有告诉您任何有关到您在客户端收到它时的列表。
如果返回值与列表的状态匹配对您来说很重要,那么这意味着您有一系列想要成为原子的操作,在这种情况下,您可以使用 Redis 的事务工具。例如,如果您RPUSH
在Lua 脚本中执行 ,则可以确定返回值表示列表的状态,因为整个脚本将作为单个原子操作执行。
推荐阅读
- javascript - 如何在handleSubmit 中使用带有Formik 的promise 来更改反应状态以显示/隐藏div?
- c# - C#实体框架核心如何创建linq查询模板泛型函数
- php - PHP Windows/IIS 设置中的零星/随机“找不到类”错误
- powershell - 获取 PowerShell 中文件夹和特定子文件夹中的所有文件
- azure-aks - 使用 azure AKS 的自定义指标
- javascript - 带外壳的子进程
- django - 如何在 Django 中设置本地文件和生产文件
- google-api-php-client - 带有 Admin SDK 的 Google API PHP 客户端 - listUsers 返回“无效输入”
- oracle - 分区表上的基于函数的索引
- php - 我使用 php exec 另一个 php 但这不起作用