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"