原子地从Redis数据结构中弹出多个值?

 POWER_WALKING_823 发布于 2023-02-10 08:08

是否有Redis数据结构,它允许弹出(获取+删除)多个元素的原子操作,它包含多个元素?

有众所周知的SPOP或RPOP,但它们总是返回单个值.因此,当我需要来自set/list的前N个值时,我需要调用命令N次,这很昂贵.假设集/列表包含数百万个项目.是否有类似的东西SPOPM "setName" 1000,它会返回并从集合中删除1000个随机项目,或者RPOPM "listName" 1000从列表中返回1000个最右边的项目?

我知道有像SRANDMEMBER和LRANGE这样的命令,但它们不会从数据结构中删除项目.它们可以单独删除.但是,如果有更多客户端从同一数据结构中读取,则可以多次读取一些项目,并且可以在不读取的情况下删除一些项目!因此,原子性是我的问题所在.

此外,如果这种操作的时间复杂性更昂贵,我也没关系.我怀疑它会比发布N(比如上一个例子中的1000,N)单独请求Redis服务器更昂贵.

我也知道单独的交易支持.但是,来自Redis docs的这句话不鼓励我将它用于修改集合的并行进程(从中破坏性地读取):
当使用WATCH时,EXEC只有在未修改被监视的键​​时才会执行命令,允许进行检查和设置机制.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有