Pertama, cara tercepat adalah melakukan semua ini di dalam EVAL.
Selanjutnya, pendekatan yang disarankan untuk mengulangi semua kunci adalah SCAN. Itu tidak akan mengulangi lebih cepat dari KEYS
, tetapi akan memungkinkan Redis untuk memproses beberapa tindakan lain di antaranya, sehingga akan membantu perilaku aplikasi secara keseluruhan.
Skripnya akan seperti 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
, tetapi akan gagal jika Anda memiliki kunci yang tidak dapat diakses dengan GET (seperti set, daftar). Anda perlu menambahkan penanganan kesalahan ke dalamnya. Jika Anda perlu menyortir, Anda dapat melakukannya di LUA secara langsung, atau nanti di sisi klien. Yang kedua akan lebih lambat, tetapi tidak akan membiarkan pengguna lain dari instance redis menunggu.
Contoh keluaran:
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"