Redis:有没有办法只在set存在时添加到有序集?

时间:2016-07-01 04:10:06

标签: redis sortedset

我想知道是否有办法检查redis排序集是否已经存在。如果有条件集存在则向其添加元素,否则不会发生任何事情。

因为使用pipeline执行此操作,因此每次从redis中检查排序集是否存在都会花费很多成本。

2 个答案:

答案 0 :(得分:1)

您可以在管道中运行Lua脚本 - 如果密钥存在,下面的代码将添加所提供密钥的所有参数:

local exists = redis.call('EXISTS', KEYS[1])
if exists == 1 then
  redis.call('ZADD', KEYS[1], unpack(ARGV))
end

注意:此处没有错误检查(即键的类型是zset,参数有效...)以节省CPU周期,并简化示例。也没有返回代码 - 如果需要,可以添加它。

答案 1 :(得分:0)

您可以使用exists命令(如果存在键则返回1,否则返回0)以检查排序集是否存在以及zset是否存在,然后在exists命令的回调中,您可以调用zadd添加到zset。

exists也是O(1)操作。您可以从http://redis.io/commands/exists

了解相关信息

示例代码

var r = redis.createClient(6379,"127.0.0.1");
r.exists(zsetKey, function(err, isExists){ 
  if(isExists){ // isExists = 1 if zsetKey exists
    r.zadd(zetKey, score, member, function(insertErr, insertReply){
      // add to zset
    })
  }else{
    //key not present
  }
})