Redis:有没有办法仅在集合存在时添加到排序集合?
Redis: Is there a way to add to sorted set only if set is exists?
我想知道是否有办法检查是否已经存在 redis 排序集。如果存在排序集,则向其添加元素,否则不会发生任何事情。
因为用 pipeline
这样做,所以每次从 redis 中检查排序集是否存在都会花费很多成本。
您可以使用exists
命令(returns 1 if key is present else 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
}
})
您可以 运行 Lua 管道中的脚本 - 下面的脚本会将所有参数添加到提供的键中,前提是该键存在:
local exists = redis.call('EXISTS', KEYS[1])
if exists == 1 then
redis.call('ZADD', KEYS[1], unpack(ARGV))
end
注意:这里没有错误检查(即键的类型是 zset,参数是有效的...)以节省 CPU 个周期,并简化示例。也没有 return 代码 - 如果需要,请添加它。
我想知道是否有办法检查是否已经存在 redis 排序集。如果存在排序集,则向其添加元素,否则不会发生任何事情。
因为用 pipeline
这样做,所以每次从 redis 中检查排序集是否存在都会花费很多成本。
您可以使用exists
命令(returns 1 if key is present else 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
}
})
您可以 运行 Lua 管道中的脚本 - 下面的脚本会将所有参数添加到提供的键中,前提是该键存在:
local exists = redis.call('EXISTS', KEYS[1])
if exists == 1 then
redis.call('ZADD', KEYS[1], unpack(ARGV))
end
注意:这里没有错误检查(即键的类型是 zset,参数是有效的...)以节省 CPU 个周期,并简化示例。也没有 return 代码 - 如果需要,请添加它。