以原子方式从 Redis 数据结构中弹出多个值?

2024-03-24

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

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

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

另外,如果此类操作的时间复杂度更昂贵,我也没关系。我怀疑这会比向 Redis 服务器发出 N 个(比方说 1000 个,前一个示例中的 N 个)单独请求更昂贵。

我还了解单独的交易支持。然而,Redis 文档中的这句话不鼓励我将它用于修改集合的并行进程(破坏性地从中读取):
使用 WATCH 时,只有在监视的键未被修改时,EXEC 才会执行命令,从而允许检查和设置机制。 http://redis.io/commands/exec


Use LRANGE with LTRIM in a pipeline http://redis.io/topics/pipelining。该管道将​​作为一个原子事务运行。您的上述担忧WATCH, EXEC此处不适用,因为您正在运行LRANGE and LTRIM作为一项交易,它们之间无法进行来自任何其他客户的任何其他交易。试试看。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以原子方式从 Redis 数据结构中弹出多个值? 的相关文章

  • 是否有可嵌入的 Java 替代 Redis?

    根据这个线程 https stackoverflow com questions 3047010 best redis library for java 如果我想从Java中使用Redis Jedis是最好的选择 然而 我想知道是否有任何库
  • Docker-compose Predis 不通过 PHP 连接

    我正在尝试使用 docker compose 将 PHP 与 redis 连接 docker compose yml version 2 services redis image redis 3 2 2 php image company
  • Redis hash写入速度非常慢

    我面临一个非常奇怪的问题 使用 Redis 时 我的写入速度非常糟糕 在理想的情况下 写入速度应该接近 RAM 上的写入速度 这是我的基准 package redisbenchmark import redis clients jedis
  • Spring Data Redis - Lettuce连接池设置

    尝试在 spring data redis 环境中设置 Lettuce 连接池 下面是代码 Bean LettuceConnectionFactory redisConnectionFactory GenericObjectPoolConf
  • Go 中带有 TTL 选项的映射

    我需要构建这样的数据结构 map string SomeType 但它必须将值存储大约 10 分钟 然后从内存中清除 第二个条件是记录数量 它必须是巨大的 该数据结构必须至少添加每秒 2 5K 条记录 那么 Go 中最正确的实现方法是什么
  • Dijkstra算法的时间复杂度是多少

    Dijkstra V E S O 1 for each vertex v V O V d v O 1 d source 0 O 1 while S V O V v non visited vertex with the smallest d
  • Delphi是否存在无锁队列“多个生产者-单个消费者”?

    我发现了几个针对单个生产者 单个消费者的实现 但没有找到多个生产者 单个消费者的实现 Delphi是否存在 多个生产者 单个消费者 的无锁队列 无锁队列全线程库 http otl 17slon com支持多个生产者 您可以将它与线程库分开使
  • 理解 C:指针和结构

    我试图更好地理解 c 但很难理解在哪里使用 和 字符 一般而言只是结构 这是一些代码 void word not lc3 word t R lc3 word t A int ptr ptr R ptr 0 1 printf this is
  • 如何有效地合并两个 BST?

    如何合并两个二叉搜索树并保持BST的性质 如果我们决定从树中取出每个元素并将其插入到另一个元素中 则此方法的复杂度将为O n1 log n2 where n1是树的节点数 比如T1 我们已经拆分了 并且n2是另一棵树的节点数 比如T2 执行
  • 链表迭代器实现 C++

    我已经在 C 中创建了一个链接列表 并想为其实现一个迭代器 以便我可以执行范围循环 for const int i list where Linked List
  • 无法启动redis.service:单元redis-server.service被屏蔽

    我在 ubuntu 16 04 上安装了 Redis 服务器 但是当我尝试使用启动redis服务时 sudo systemctl start redis 我收到消息 Failed to start redis service Unit re
  • Redis SYNC 套接字上的错误情况:连接被拒绝

    在我的 django 应用程序中使用 celery 和 redis 一切都工作正常 直到我遇到了问题 redis 文件的位置已更改 redis 无法访问它们 经过查找 原来这是由于网络随机攻击造成的 需要添加confg 我添加文件后 一段时
  • 使用 Redis 命令 incr 和 expire 时的竞争条件

    根据redis文档 http redis io commands incr http redis io commands incr 在段落模式 速率限制器 2 较短的版本代码 value INCR ip IF value 1 THEN EX
  • 如果我从 python 中的多个不同进程登录到同一个文件,会发生什么?

    我花了几个小时来挖掘这种行为 首先是关于这些问题 write 2 到本地文件系统的原子性 https stackoverflow com questions 10650861 atomicity of write2 to a local f
  • 如何设置和获取Redis中存储的对象?

    我试图在 redis 中存储一个对象 当我获取该对象时 它似乎不起作用 I tried u User new u name blankman redis set test u x redis get test x name error 我想
  • 根据多个值过滤字典列表

    我有一个字典列表 我想根据多个条件进行过滤 该列表的简化版本如下所示 orders name v price 123 location Mars name x price 223 location Mars name x price 124
  • Node Js:Redis 作业在完成其任务后未完成

    希望你们做得很好 我在我的 Nodejs 项目中实现了 BullMQ Bull 的下一个主要版本 来安排发送电子邮件的作业 例如 发送忘记密码请求的电子邮件 所以 我编写了如下所示的代码 用户服务 await resetPasswordJo
  • 比较 C# 中 DateTime 的二进制表示形式

    我有一个DateTime表示为长 8 个字节 来自DateTime ToBinary 我们称之为dateTimeBin 是否有一种最佳方法可以删除时间信息 我只关心日期 以便我可以将其与一天的开始进行比较 假设我们将此样本值作为一天的开始
  • 当目标是查找某个字符串的所有出现情况时,KMP 最坏情况的复杂度是多少?

    我还想知道哪种算法在查找另一个字符串中所有出现的字符串时具有最坏情况的复杂性 博耶 摩尔算法似乎具有线性时间复杂度 KMP 算法在查找字符串中所有出现的模式时具有线性复杂度 如 Boyer Moore 算法1 如果您尝试在 aaaaaaaa
  • Lua中按字符分割字符串

    我有像这样的字符串 ABC DEF 我需要将它们分开 字符并将两个部分分别分配给一个变量 在 Ruby 中 我会这样做 a b ABC DEF split 显然Lua没有这么简单的方法 经过一番挖掘后 我找不到一种简短的方法来实现我所追求的

随机推荐

  • winforms:使用parallel.foreach更新进度

    我没有看到任何与我的问题相关的帖子 因此 如果我发布已经提出的问题 我深表歉意 我有一个 Windows 窗体程序 C 用于检查股票并进行分析 主窗体通过新线程和 ShowDialog 启动另一个窗体 当它加载时 它正在运行parallel
  • Spring ThreadPoolTask​​Executor 的工作原理

    我一直在阅读 Spring 的 ThreadPoolTask Executor 的设置如何协同工作以及线程池和队列如何工作 This https stackoverflow com a 43874563 10727434stackoverf
  • 如何在 swift 中向我的 cocoa 应用程序添加设置?

    我对 Swift 编程还很陌生 我想知道是否有一种简单的方法可以在 Swift 中向我的 Cocoa 应用程序添加设置 首选项 如果可能的话 我想要一份分步指南 我主要想知道如何将用户的首选项存储在磁盘和代码部分上 在我当前的代码中 它将需
  • .NET 多个类库合二为一

    我在VS2008中工作 我有一个自定义类库 CL1 它引用另一个自定义类库 CL2 最终我的发布文件夹中包含了 CL1 和 CL2 现在 CL1 的使用者需要在项目中包含两个 dll 我认为这是不合适的 我强烈地感觉到必须有一种方法来实现单
  • 在用户接受同意之前暂时禁用 Firebase 的所有服务

    我有一个实施了 Firebase 的应用程序 我想要的是在用户接受数据收集同意之前禁用与 Firebase 相关的所有内容 在 android 文档中 我看到 例如 我可以使用以下方法禁用 Firebase Analytics setAna
  • 该字段泄漏上下文对象

    我在非 Activity 中使用 Context 对象 它工作正常 但问题是它显示警告 That is where I am using the context object Here is the result of inspection
  • 如何在 JDBC url 中正确传递会话变量?

    我必须增加group concat max len 我无法通过preparestatement 做到这一点 而且我也无法在mysql my conf 文件中做到这一点 我在 mysql 文档中发现有一个选项可以在 url 中传递会话变量 但
  • Python argparse 字典 arg

    我想收到一个dict str gt str 来自命令行的参数 做argparse ArgumentParser提供吗 或者还有其他图书馆吗 对于命令行 program py dict d key key1 value val1 key ke
  • 为什么

    编辑 另请参阅下面我自己的答案 2016 例如 ul li class first a href title Home a li li a href title Chi siamo a ul li a href title item1 a
  • 动态调用DLL中的方法

    我有一个包含一些方法 显示 隐藏和验证 的 DLL 这是其中一种方法的示例hide Panel paneldynamic String id List
  • Angular - routerLink 和状态问题

    我想使用 routerLink 和状态从 html 页面路由到另一个页面 使用标签没有问题 在登陆页面的 ngOnInit 期间 我可以按预期检索状态 使用标签主页也可以导航 但状态结果未定义 我有什么错吗 登录页面的html
  • 无法加载此类文件--2.2/gherkin_lexer_en,如何修复?

    我需要一点帮助 我该如何解决这个问题 当我打电话时cucumber我收到以下错误 WARNING You must use ANSICON 1 31 or higher https github com adoxa ansic on to
  • 目前仅在 PRIMARY KEY 的聚集列上支持排序依据

    卡桑德拉2 0 7 cql 3 1 1 CREATE TABLE playlists id uuid song order int song id uuid title text album text artist text PRIMARY
  • 如何为 has_many_polymorphs 和错误设置这些 CRUD 控制器操作

    我正在使用有很多多态性 https github com fauna has many polymorphs插件 以便可以将视频 主题和用户发布到个人资料中 因此 一个个人资料有很多 showable objects 可以是视频 主题和用户
  • 使用 microsoft graph c# asp.net 将新文件上传到 onedrive

    尝试将尚不存在的文件上传到 onedrive 我已经设法让它更新现有文件 但似乎无法弄清楚如何创建一个全新的文件 我已经使用以下方法完成了此操作Microsoft Graph图书馆 以下是用于更新现有文件的代码 public async T
  • 清除 Thread.interrupt() 标志的方法

    我最近继承了一个大型Java应用程序 其中几乎没有线程安全性 我目前正在研究的是让所有线程正确处理被中断的情况 而不是使用非常糟糕的线程Thread stop 部分问题是我不知道清除中断标志的每个方法调用 目前我知道以下内容将清除中断标志
  • C - 棘手的开关盒工作..!

    Folks 最近开始学习C 卡在一个点上 它是关于 switch case 语句的工作 这是代码 include
  • Android 使用令牌会话登录:类似于用户登录并保持会话状态直到注销

    登录 Android 应用程序后 如何在 php api 中创建令牌会话 像这样 我想确保当用户登录时 无论发生什么情况 崩溃 关闭 断电 重新启动 离开应用程序 它都会保持会话状态 同时用户信息数据将与中的所有活动一起发送将应用程序连接到
  • Xcode 6 Storyboard 无法居中

    我在尝试将对象置于故事板中心时遇到问题 我创建了一个新的 单视图应用程序 项目 输入了 main Storyboard 我试图在其中心添加一个标签 在 4 英寸 iPhone 的此故事板预览中 即使我强制故事板使用 3 5 4 或 4 7
  • 以原子方式从 Redis 数据结构中弹出多个值?

    是否有一个 Redis 数据结构 允许弹出 获取 删除 其中包含的多个元素的原子操作 有众所周知的 SPOP 或 RPOP 但它们总是返回单个值 因此 当我需要 set list 中的前 N 个值时 我需要调用该命令 N 次 这是昂贵的 假