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

12

我有一些类似 ["aaa","bbb","ccc"] 的键数组,所以我想使用一个命令从redis中删除所有这些键。 我不想使用循环迭代。 我了解到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"),这段代码就能正常工作。


你解决了你的问题吗? - Philip O'Brien
实际上,在传递数组方面存在问题,否则这段代码运行良好。 - abhaygarg12493
4个回答

16

您可以按以下方式直接传递数组

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
显示设置后打印的键,但在删除后不打印。

7
在当前版本的node_redis(v2.6.5)中,可以使用逗号分隔的键列表或键数组来删除。请参见此处的测试(链接)。请注意保留HTML标记。
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']);

你说这是可能的,但没有展示如何实现。 - Mike P
我分享的链接展示了如何在测试中完成此操作。但是,我会更新我的答案以明确展示此过程。 - Geoff Ford
建议引用外部链接的相关部分(就像你现在所做的那样),以防链接不可访问。 - Mike P

3

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

要使其与数组一起使用,请使用JavaScript apply方法:

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

1

node-redis不是这样工作的,但如果你真的有很多del命令,它会自动将它们进行管道传输,所以用循环做可能比你想象的更有效率。

你也可以尝试使用module和multi:

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

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

本能地看起来不错。您知道循环遍历键数组并将它们添加到多维数组以执行比仅调用键数组本身的.del更高效吗? - Josh Oldham

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