For det første er den hurtigste måde at gøre alt dette i EVAL.
Dernæst er den anbefalede tilgang til at gentage alle nøgler SCAN. Det ville ikke iterere hurtigere end KEYS
, men vil tillade Redis at behandle nogle andre handlinger ind imellem, så det vil hjælpe med overordnet applikationsadfærd.
Scriptet vil være noget i stil med 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 vil mislykkes, hvis du har nøgler utilgængelige med GET (som sæt, lister). Du skal tilføje fejlhåndtering til det. Hvis du har brug for sortering, kan du gøre det enten i LUA direkte eller senere på klientsiden. Den anden vil være langsommere, men vil ikke lade andre brugere af redis-instansen vente.
Eksempeloutput:
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"