För det första är det snabbaste sättet att göra allt detta i EVAL.
Nästa rekommenderade metod för att upprepa alla nycklar är SCAN. Det skulle inte iterera snabbare än KEYS
, men kommer att tillåta Redis att bearbeta några andra åtgärder däremellan, så det kommer att hjälpa till med det övergripande applikationsbeteendet.
Skriptet kommer att vara ungefär som 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
, men det kommer att misslyckas om du har nycklar otillgängliga med GET (som set, listor). Du måste lägga till felhantering till den. Om du behöver sortering kan du göra det antingen i LUA direkt, eller senare på klientsidan. Den andra kommer att vara långsammare, men låter inte andra användare av redis-instansen vänta.
Exempelutdata:
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"