使用Node.js从Redis列表中删除元素

3

我想使用nodejs管理redis中的一个列表。我可以用以下代码存储列表:

client.rpush(['room_'+room, data.customClient], function(err, reply) {

        client.lrange('room_'+room, 0, -1, function(err, reply) {
          console.log(reply);
      });
    });

控制台输出为:

[ 'POanqn9llyTcuIurUPAN', 'm9vd57wecp6JvtHOrRSJ' ]

现在我想从此列表中删除一个键 POanqn9llyTcuIurUPAN。 我该怎么做?


你的 Redis 客户端应该有一个 LREM 命令的接口:http://redis.io/commands/lrem - Itamar Haber
是的,但在Node.js库中我该如何调用LREM? - Eshant Sahu
可能需要调用 client.lrem('room_'+room,reply,1);,在其中记录从 lrange 返回的回复。 - Itamar Haber
请注意,lpop 可能是您正在寻找的。 - Itamar Haber
@ItamarHaber,您能告诉我 lpop 的语法吗?我在文档中没有找到它。 - Eshant Sahu
应该很简单,就像 client.lpop('room_'+room, function...); 这样 - http://redis.io/commands/lpop - Itamar Haber
2个回答

1

可以通过lrem命令来完成。删除所有具有该值的条目的用法如下:

client.lrem('room_'+room, data.customClient, 0, 'POanqn9llyTcuIurUPAN', function(err, data){
    console.log(data); // Tells how many entries got deleted from the list
});

这里的0是一个计数器,用于删除给定列表中所有值为POanqn9llyTcuIurUPAN的条目。根据https://redis.io/commands/lrem,计数器的可能取值如下:

  • count > 0:从头到尾移动并删除与该值相等的元素。
  • count < 0:从尾到头移动并删除与该值相等的元素。
  • count = 0:删除所有与该值相等的元素。

3
为什么要将 data.customClient 传入 lrem 函数中? - JGCW
很奇怪,你可以通过索引访问,但不能通过索引删除。为什么呢?不是O(1)。需要搜索值。此外,您无法告诉列表从特定索引开始删除值。它要么是头部,要么是尾部,这意味着您无法确定是否正在删除相同的索引。 - mjs

0

这可以很轻松地完成:

client.lrem('room_'+room, 0, 'POanqn9llyTcuIurUPAN', function(err, data){
    console.log(data); // Tells how many entries got deleted from the list
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接