如果2个worker同时在一个有序集合的同一个元素上调用ZREM会发生什么?它会向实际删除元素的工作人员返回true并向另一个返回false以指示它不存在,还是会向两者返回true?换句话说,ZREM在内部是原子的吗? 最佳答案 Redis(大部分)是单线程的,所以它的所有操作都是原子的,ZREM也不异常(exception)。但是,您的问题实际上是关于以原子方式执行“ZPOP”,因此有两种可能的方法可以做到这一点。选项1:WATCH/MULTI/EXEC在伪代码中,这是乐观交易的样子::startWATCHsomekeymembe
如果2个worker同时在一个有序集合的同一个元素上调用ZREM会发生什么?它会向实际删除元素的工作人员返回true并向另一个返回false以指示它不存在,还是会向两者返回true?换句话说,ZREM在内部是原子的吗? 最佳答案 Redis(大部分)是单线程的,所以它的所有操作都是原子的,ZREM也不异常(exception)。但是,您的问题实际上是关于以原子方式执行“ZPOP”,因此有两种可能的方法可以做到这一点。选项1:WATCH/MULTI/EXEC在伪代码中,这是乐观交易的样子::startWATCHsomekeymembe
我想使用key="user_queue"和members=["v1","v2",..."v50"]调用类似“ZRem(keystring,members...string)”的方法。我试过类似的东西funcZRem(keystring,members...string){//dosomething}funcmain(){//dosomething//task_idsisa[]stringZRem("user_queue",task_ids[0],task_ids[1:]...)}但收到编译错误。toomanyargumentsincalltoZRem 最佳答
我想使用key="user_queue"和members=["v1","v2",..."v50"]调用类似“ZRem(keystring,members...string)”的方法。我试过类似的东西funcZRem(keystring,members...string){//dosomething}funcmain(){//dosomething//task_idsisa[]stringZRem("user_queue",task_ids[0],task_ids[1:]...)}但收到编译错误。toomanyargumentsincalltoZRem 最佳答
我正在使用ZREM删除元素,但是元素通常不是有序集合的成员。我是否应该先使用ZSCORE检查元素是否在集合中,然后再使用ZREM,因为前者是O(1)并且因此总体上更快? 最佳答案 没有。它会使您的代码更复杂,并且可能会更慢。与网络RTT(以毫秒为单位)相比,这两个命令运行速度非常快(以微秒为单位)。您几乎可以忽略命令处理时间。此外,如果该元素存在,您必须发送2个命令,并获得双倍RTT。这将比仅发送1个命令慢得多。是的,您可以将逻辑包装到Lua脚本中以避免额外的RTT。然而,这使它变得更加复杂。此外,在Lua和C之间交换值可能比命令处
我正在构建一个Redis服务器端脚本,但我缺乏Lua经验让我有点卡住了。基本上有一个大的“主要”排序集(包含约1,000个值),我想删除在较小的“删除”集(包含约100个值)中找到的任何键。想想sdiffstore,但“主要”集中的成员分数很重要。一个简单的例子:"main"ZADDmain6"one"ZADDmain7"two"ZADDmain8"three"ZADDmain9"four"ZADDmain10"five""remove"ZADDremove"two"ZADDremove"four"desiredoutput(storedinasortedset):6"one"8"th