Erstens ist es am schnellsten, all dies innerhalb von EVAL zu erledigen.
Der nächste empfohlene Ansatz zum Iterieren aller Schlüssel ist SCAN. Es würde nicht schneller iterieren als KEYS
, erlaubt Redis jedoch, dazwischen einige andere Aktionen zu verarbeiten, sodass es beim allgemeinen Anwendungsverhalten hilfreich ist.
Das Skript wird etwa so aussehen: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
, aber es schlägt fehl, wenn Sie Schlüssel haben, auf die mit GET nicht zugegriffen werden kann (wie Sets, Listen). Sie müssen eine Fehlerbehandlung hinzufügen. Wenn Sie eine Sortierung benötigen, können Sie dies entweder direkt in LUA oder später auf der Clientseite tun. Die zweite wird langsamer sein, aber andere Benutzer der Redis-Instanz nicht warten lassen.
Beispielausgabe:
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"