我想知道是否有办法检查redis排序集是否已经存在。如果有条件集存在则向其添加元素,否则不会发生任何事情。
因为使用pipeline
执行此操作,因此每次从redis中检查排序集是否存在都会花费很多成本。
答案 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
}
})