Node.js 如何从redis中的值中获取密钥,并通过检查其值删除其他密钥?
我想保留两个收藏Node.js 如何从redis中的值中获取密钥,并通过检查其值删除其他密钥?,node.js,redis,Node.js,Redis,我想保留两个收藏 活动或活动服务器。假设集合包含SERVER1、SERVER2 连接到特定服务器的客户机c1、c2、c3(比如服务器1)和客户机c4、c5、c6连接到服务器2,其他集合将 有, 我将从集合中删除的非活动服务器。 每当我从redis中删除服务器(比如SERVER1)时,我都希望删除其值与之匹配的实例。在这里,我想完全删除c1,c2,c3。然后收集将如下所示: **KEY : VALUE** c4:SERVER2 c6:SERVER2 c5:SERVER2
**KEY : VALUE**
c4:SERVER2
c6:SERVER2
c5:SERVER2
为了维护集合,我可以使用什么类型的redis命令。喜欢集合/列表。?
我怎样才能达到这个结果?您的要求是1。通过检查客户端id来搜索客户端连接到的服务器;2.删除服务器时,请删除此服务器上的所有客户端 我认为您可以通过redis存储客户机->服务器映射,并使用redis存储服务器[x]的客户机 用于将客户端添加到服务器 和用于完全删除服务器及其客户端的密钥 另外,使用redis管道来确保原子性 例如:
HMSET connectedClients c1 SERVER1 c2 SERVER1 c3 SERVER1 c4 SERVER2 c5 SERVER2 c6 SERVER2
SADD SERVER1Clients c1 c2 c3
SADD SERVER2Clients c4 c5 c6
要将客户端C添加到服务器[i]:
client.multi()
.sadd("SERVER" + i, 'C')
.hset('CLIENT_TO_SERVER', 'C', "SERVER" + i)
.exec(function (err, replies) {
console.log(replies)
});
client.watch("SERVER" + i);
multi = client.multi();
client.smembers("SERVER" + i, function(err, replies) {
var keys = Object.keys(replies)
keys.forEach(function(i) {
multi.hdel('CLIENT_TO_SERVER', keys[i])
}
});
multi.del("SERVER"+i);
multi.exec(function(err,replies) {
console.log(replies)
});
要删除服务器[i]:
client.multi()
.sadd("SERVER" + i, 'C')
.hset('CLIENT_TO_SERVER', 'C', "SERVER" + i)
.exec(function (err, replies) {
console.log(replies)
});
client.watch("SERVER" + i);
multi = client.multi();
client.smembers("SERVER" + i, function(err, replies) {
var keys = Object.keys(replies)
keys.forEach(function(i) {
multi.hdel('CLIENT_TO_SERVER', keys[i])
}
});
multi.del("SERVER"+i);
multi.exec(function(err,replies) {
console.log(replies)
});
您可以使用
keys('SERVER*')
获取第一个集合中的所有成员对于主列表,您可以使用SET key val
命令存储它们,也可以使用HSET
(或HMSET
)将它们存储在专用哈希表中。后者将为您提供有效使用该表的选项(尤其是在数据库中存储了大量键的情况下)
您还需要为每个服务器保留一组连接的客户端。
删除服务器时,请从主哈希表中删除所有服务器集成员,并在完成后删除该集
例如:
HMSET connectedClients c1 SERVER1 c2 SERVER1 c3 SERVER1 c4 SERVER2 c5 SERVER2 c6 SERVER2
SADD SERVER1Clients c1 c2 c3
SADD SERVER2Clients c4 c5 c6
删除服务器时,您可以使用所有已连接的客户端
SMEMBERS SERVERxClients
,并使用
HDEL连接的客户端
指向所有命令和文档的链接