使用 node-redis 删除 redis 中的键数组

Posted

技术标签:

【中文标题】使用 node-redis 删除 redis 中的键数组【英文标题】:Delete array of keys in redis using node-redis 【发布时间】:2015-12-26 20:37:19 【问题描述】:

我有像 ["aaa","bbb","ccc"] 这样的键数组,所以我想使用一个命令从 redis 中删除所有这些键。我不想使用 loop 进行迭代。我阅读了有关 redis 命令 DEL 和终端 redis-client 的信息,但使用 nodejs 它不起作用

Redisclient.del(tokenKeys,function(err,count)
             Logger.info("count is ",count)
             Logger.error("err is ",err)

         )

其中 tokenKeys=["aaa","bbb","ccc"] ,如果我发送一个像 tokenKeys="aaa" 之类的密钥,则此代码有效

【问题讨论】:

您的问题解决了吗? 实际上传递数组有问题,否则这段代码可以正常工作 【参考方案1】:

你可以像下面这样传递数组

var redis = require("redis"),
    client = redis.createClient();

client.on("error", function (err) 
    console.log("Error " + err);
);

client.set("aaa", "aaa");
client.set("bbb", "bbb");
client.set("ccc", "ccc");

var keys = ["aaa", "bbb", "ccc"];


client.keys("*", function (err, keys) 
    keys.forEach(function (key, pos) 
         console.log(key);
    );
);

client.del(keys, function(err, o) 
);

client.keys("*", function (err, keys) 
    keys.forEach(function (key, pos) 
         console.log(key);
    );
);

如果你运行上面的代码,你会得到以下输出

$ node index.js
string key
hash key
aaa
ccc
bbb
string key
hash key

显示设置后打印但删除后不打印的键

【讨论】:

【参考方案2】:

当然,在当前版本的 node_redis (v2.6.5) 中,可以使用逗号分隔的键列表或键数组删除两者。查看here 的测试。

var redis = require("redis");
var client = redis.createClient();

client.set('foo', 'foo');
client.set('apple', 'apple');

// Then either

client.del('foo', 'apple');

// Or

client.del(['foo', 'apple']);

【讨论】:

你说这是可能的,但没有展示它是如何做到的。 我分享的链接在测试中显示了它是如何完成的。但是我会更新我的答案以明确显示这一点。 建议引用外部链接的相关部分(就像您现在所做的那样),以防链接无法访问。【参考方案3】:

del 函数直接在 Redis DB 客户端中实现, IE。 redis.del("aaa","bbb","ccc") 将删除多个项目

要使其与数组一起使用,请使用 javascript 应用方法:

redis.del.apply(redis, ["aaa","bbb","ccc"])

【讨论】:

【参考方案4】:

node-redis 不是这样工作的,但如果你真的有很多 del 命令,它会自动将它们流水线化,因此它可能比你想象的循环执行更有效。

你也可以试试这个module with multi:

var redis  = require("redis"),
    client = redis.createClient(), multi;

client.multi([
    ["del", "key1"],
    ["del", "key2"]
]).exec(function (err, replies) 
    console.log(replies);
);

【讨论】:

本能地这看起来不错。你知道循环遍历一个键数组并将它们添加到一个多数组中执行比简单地在键数组本身上调用 .del 更高效吗?

以上是关于使用 node-redis 删除 redis 中的键数组的主要内容,如果未能解决你的问题,请参考以下文章

将 node-redis 与 node 8 util.promisify 一起使用

为集合成员添加哈希--node-redis

Node-Redis:就绪检查失败 - 需要 NOAUTH 身份验证

Node_redis - 如何删除密钥?

Node.js中使用Redis数据库

如何删除节点redis中的所有内容?