Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Delete array of keys in redis using node-redis

I have arrays of keys like ["aaa","bbb","ccc"] so I want to delete all these keys from redis using one command . I donot want to iterate using loop . I read about redis command DEL and on terminal redis-client it works but using nodejs it does not work

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

         })

where tokenKeys=["aaa","bbb","ccc"] , this code is work if I send one key like tokenKeys="aaa"

like image 850
abhaygarg12493 Avatar asked Sep 29 '15 11:09

abhaygarg12493


Video Answer


4 Answers

You can just pass the array as follows

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);
    });
});

If you run the above code you will get the following output

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

showing the keys printed after being set, but not printed after deletion

like image 143
Philip O'Brien Avatar answered Oct 23 '22 22:10

Philip O'Brien


Certainly at current version of node_redis (v2.6.5) it is possible to delete both with a comma separated list of keys or with an array of keys. See tests for both 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']);
like image 6
Geoff Ford Avatar answered Oct 24 '22 00:10

Geoff Ford


del function is implemented directly as in Redis DB client, I.e. redis.del("aaa","bbb","ccc") will remove multiple items

To make it work with array use JavaScript apply approach:

redis.del.apply(redis, ["aaa","bbb","ccc"])
like image 3
Alexander Levin Avatar answered Oct 24 '22 00:10

Alexander Levin


node-redis doesn't work like that but if you really have a lot of del commands it will pipeline them automatically so it is probably more efficient than you think to do it in a loop.

You can also try this module with multi:

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

client.multi([
    ["del", "key1"],
    ["del", "key2"]
]).exec(function (err, replies) {
    console.log(replies);
});
like image 1
Jason Livesay Avatar answered Oct 23 '22 22:10

Jason Livesay