【问题标题】:Deleting an element from redis list with Node.js使用 Node.js 从 redis 列表中删除元素
【发布时间】:2016-10-16 20:34:15
【问题描述】:

我试图用 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 命令的接口:redis.io/commands/lrem
  • 是的,但是在 Node.js 库中我如何调用 LREM ??
  • 或许可以致电client.lrem('room_'+room,reply,1); 记录来自 lrange 的回复
  • 但是请注意,lpop 可能就是您要查找的内容。
  • @ItamarHaber 你能告诉我 lpop 的语法吗,我没有在文档中找到它。

标签: javascript node.js redis node-redis


【解决方案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
  • count = 0:删除所有等于value的元素。

【讨论】:

  • 为什么是data.customClient,传入lrem?
  • 太奇怪了,你可以按索引访问,但不能按索引删除。为什么。不是 o(1)。需要寻找价值。此外,您不能对列表说从某个索引开始删除一个值。它的头部或尾部意味着您不能确定要删除相同的索引。
【解决方案2】:

可以这样轻松完成:

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

【讨论】:

    猜你喜欢
    • 2017-11-07
    • 2015-08-14
    • 2015-10-13
    • 1970-01-01
    • 2017-03-05
    • 2012-02-19
    相关资源
    最近更新 更多