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

我想保留两个收藏

  • 活动或活动服务器。假设集合包含SERVER1、SERVER2
  • 连接到特定服务器的客户机c1、c2、c3(比如服务器1)和客户机c4、c5、c6连接到服务器2,其他集合将 有,
  • 我将从集合中删除的非活动服务器。

    每当我从redis中删除服务器(比如SERVER1)时,我都希望删除其值与之匹配的实例。在这里,我想完全删除c1,c2,c3。然后收集将如下所示:

    **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连接的客户端

    指向所有命令和文档的链接