Ten eerste is de snelste manier om dit allemaal binnen EVAL te doen.
Vervolgens is SCAN de aanbevolen benadering om alle sleutels te herhalen. Het zou niet sneller itereren dan KEYS
, maar zal Redis in staat stellen enkele andere acties tussendoor te verwerken, dus het zal helpen bij het algemene toepassingsgedrag.
Het script zal zoiets zijn als 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
, maar het zal mislukken als je sleutels hebt die niet toegankelijk zijn met GET (zoals sets, lijsten). U moet er foutafhandeling aan toevoegen. Als u moet sorteren, kunt u dit rechtstreeks in LUA doen, of later aan de clientzijde. De tweede zal langzamer zijn, maar zou andere gebruikers van redis instance niet laten wachten.
Voorbeelduitvoer:
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"