Giá trị mặc định là 10
. Điều đó có nghĩa là lệnh sẽ trả về nhiều hơn hoặc ít hơn 10 phím , có thể ít hơn nếu các khóa được điền thưa thớt trong các vị trí băm hoặc được lọc ra bởi MATCH
họa tiết. Nó có thể nhiều hơn nếu một số khóa đang chia sẻ một khe cắm băm. Nhưng dù sao, công việc được thực hiện tỷ lệ với COUNT
tham số.
Redis là một luồng. Một trong những lý do SCAN
được giới thiệu là cho phép xem qua tất cả các khóa mà không cần chặn máy chủ trong thời gian dài, bằng cách thực hiện một vài bước tại một thời điểm.
Và đó chính xác là tiêu chí để quyết định đâu là một con số đẹp. Bạn sẵn sàng chặn trong bao lâu máy chủ Redis của bạn bằng cách chạy SCAN
yêu cầu. COUNT
càng cao , khối càng dài.
Hãy sử dụng tập lệnh Lua để hiểu về COUNT
va chạm. Sử dụng nó trên môi trường của bạn để nhận kết quả dựa trên tài nguyên máy chủ của bạn.
Tập lệnh Lua:
local t0 = redis.call('TIME')
local res = redis.call('SCAN', ARGV[1], 'COUNT', ARGV[2])
local t1 = redis.call('TIME')
local micros = (t1[1]-t0[1])*1000000 + t1[2]-t0[2]
table.insert(res,'Time taken: '..micros..' microseconds')
table.insert(res,'T0: '..t0[1]..string.format('%06d', t0[2]))
table.insert(res,'T1: '..t1[1]..string.format('%06d', t1[2]))
return res
Ở đây chúng tôi sử dụng Redis TIME
yêu cầu. Lệnh trả về:
- thời gian unix tính bằng giây
- micro giây
Một vài lần chạy trong máy của tôi, với 1 triệu phím:
COUNT TIME IN MICROSECONDS
10 37
100 257
1000 1685
10000 14438
Lưu ý rằng những thời gian này không bao gồm thời gian được sử dụng để đọc từ ổ cắm và để đệm và gửi phản hồi. Thời gian thực tế sẽ lớn hơn. Thời gian Redis mất một lần, bao gồm cả thời gian di chuyển mạng không phải là lúc máy chủ Redis của bạn bị chặn.
Đây là cách tôi gọi tập lệnh Lua và kết quả:
> EVAL "local t0 = redis.call('TIME') \n local res = redis.call('SCAN', ARGV[1], 'COUNT', ARGV[2]) \n local t1 = redis.call('TIME') \n local micros = (t1[1]-t0[1])*1000000 + t1[2]-t0[2] \n table.insert(res,'Time taken: '..micros..' microseconds') \n table.insert(res,'T0: '..t0[1]..string.format('%06d', t0[2])) \n table.insert(res,'T1: '..t1[1]..string.format('%06d', t1[2])) \n return res" 0 0 5
1) "851968"
2) 1) "key:560785"
2) "key:114611"
3) "key:970983"
4) "key:626494"
5) "key:23865"
3) "Time taken: 36 microseconds"
4) "T0: 1580816056349600"
5) "T1: 1580816056349636"