Đầu tiên, cách nhanh nhất là thực hiện tất cả những điều này bên trong EVAL.
Tiếp theo, cách tiếp cận được khuyến nghị để lặp lại tất cả các khóa là QUÉT. Nó sẽ không lặp lại nhanh hơn KEYS
, nhưng sẽ cho phép Redis xử lý một số hành động khác ở giữa, vì vậy nó sẽ giúp ích cho hành vi ứng dụng tổng thể.
Tập lệnh sẽ giống như 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
, nhưng nó sẽ không thành công nếu bạn có các khóa không thể truy cập được với GET (như bộ, danh sách). Bạn cần thêm xử lý lỗi vào nó. Nếu bạn cần phân loại, bạn có thể thực hiện trực tiếp trong LUA hoặc sau đó ở phía máy khách. Cái thứ hai sẽ chậm hơn, nhưng sẽ không để những người dùng redis instance khác phải đợi.
Đầu ra mẫu:
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"