Redis
 sql >> Database >  >> NoSQL >> Redis

Modo più veloce per iterare tutte le chiavi e i valori in redis db

Innanzitutto, il modo più veloce è fare tutto questo all'interno di EVAL.

Successivamente, l'approccio consigliato per eseguire l'iterazione di tutte le chiavi è SCAN. Non itererebbe più velocemente di KEYS , ma consentirà a Redis di elaborare alcune altre azioni intermedie, quindi aiuterà con il comportamento generale dell'applicazione.

Lo script sarà qualcosa come local data={} local i=1 local mykeys=redis.call(\"KEYS\",\"*\") for k=1,#mykeys do local tmpkey=mykeys[k] data[i]={tmpkey,redis.call(\"GET\",tmpkey)} i=i+1 end return data , ma fallirà se hai chiavi inaccessibili con GET (come set, liste). È necessario aggiungere la gestione degli errori ad esso. Se hai bisogno dell'ordinamento, puoi farlo direttamente in LUA o successivamente sul lato client. Il secondo sarà più lento, ma non lascerà attendere altri utenti dell'istanza redis.

Esempio di output:

127.0.0.1:6370> eval "local data={} local i=1 local mykeys=redis.call(\"KEYS\",\"*\") for k=1,#mykeys do local tmpkey=mykeys[k] data[i]={tmpkey,redis.call(\"GET\",tmpkey)} i=i+1 end return data" 0
1) 1) "a"
   2) "aval"
2) 1) "b"
   2) "bval"
3) 1) "c"
   2) "cval"
4) 1) "d"
   2) "dval"
5) 1) "e"
   2) "eval"
6) 1) "f"
   2) "fval"
7) 1) "g"
   2) "gval"
8) 1) "h"
   2) "hval"