2015-09-29 10 views
5

Ho array di chiavi come ["aaa", "bbb", "ccc"], quindi voglio cancellare tutte queste chiavi da redis usando un comando. Non voglio iterare usando il ciclo. Ho letto di Redis comando DEL e terminali Redis-client funziona, ma utilizzando nodejs non funzionaElimina array di chiavi in ​​rosso usando il nodo-redis

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

     }) 

dove tokenKeys = [ "aaa", "BBB", "CCC"], questo codice è lavoro se mando una chiave come tokenKeys = "aaa"

+0

Sei riuscito a risolvere il tuo problema? –

+0

sì lo risolviamo – abhaygarg12493

+0

in realtà c'è un problema nel passare l'array altrimenti questo codice funziona bene – abhaygarg12493

risposta

1

node-redis non funziona così, ma se davvero hanno un sacco di del comandi lo farà gasdotto automaticamente quindi probabilmente è più efficiente di quanto si pensi di farlo in un ciclo continuo.

Si può anche provare questo module con multi:

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

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

Questo sembra buono. Sapete come eseguire il ciclo di un array di chiavi e aggiungerle a un multi array per eseguire è più performante che semplicemente chiama .del sull'array di chiavi stesso? –

6

Si può solo passare la matrice come segue

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

Se si esegue il codice di cui sopra si otterrà il seguente output

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

mostrando i tasti stampati dopo essere stati impostati, ma non stampati dopo la cancellazione

2

della funzione viene implementata direttamente come nel client Redis DB, I.e. redis.del("aaa","bbb","ccc") rimuoverà le voci multiple

Per farlo funzionare con array di usare JavaScript applicare approccio:

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

Certamente alla versione attuale del node_redis (v2.6.5) è possibile eliminare sia con un elenco separato da virgole di chiavi o con una serie di chiavi. Vedere i test per entrambi 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']); 
+0

Tu dici che è possibile senza mostrare come può essere fatto. –

+0

Il collegamento che ho condiviso mostra nei test come può essere fatto. Tuttavia aggiornerò la mia risposta per mostrarlo esplicitamente. –

+0

Si consiglia di citare la parte pertinente di un collegamento esterno (come ora avete fatto) nel caso in cui il collegamento sia mai inaccessibile. –

Problemi correlati