복붙노트

[REDIS] 레디 스에서 SCAN / HSCAN 명령에 대한 COUNT의 권장 값이 있습니까?

REDIS

레디 스에서 SCAN / HSCAN 명령에 대한 COUNT의 권장 값이 있습니까?

나는 레디 스 SCAN의 경우 COUNT의 의미를 이해했다. 그러나, 레디 스의 COUNT위한 이상적인 값은 무엇인가?

해결법

  1. ==============================

    1.기본값은이 명령이 다시 나타납니다 더 많거나 적은 10 키, 키가 드문 드문 해시 슬롯에 채워, 또는 MATCH 패턴에 의해 필터링되는 적은 경우가 될 수 있음을 의미 (10)이다. 일부 키가 해시 슬롯을 공유하는 경우 그것은 더있을 수 있습니다. 여하튼, 수행 된 작업은 COUNT 파라미터에 비례한다.

    기본값은이 명령이 다시 나타납니다 더 많거나 적은 10 키, 키가 드문 드문 해시 슬롯에 채워, 또는 MATCH 패턴에 의해 필터링되는 적은 경우가 될 수 있음을 의미 (10)이다. 일부 키가 해시 슬롯을 공유하는 경우 그것은 더있을 수 있습니다. 여하튼, 수행 된 작업은 COUNT 파라미터에 비례한다.

    레디 스는 단일 스레드입니다. SCAN이 도입 된 이유 중 하나는 한 번에 몇 가지 단계를 이동하여, 오랜 시간 동안 서버를 차단하지 않고 모든 키를 거치지 수 있도록하는 것입니다.

    그리고 정확하게 좋은 번호가 무엇을 결정하는 기준입니다. 얼마나 오랫동안 당신은 SCAN 명령을 실행하여 레디 스 서버를 차단하고자합니다. 높을수록 COUNT, 더 이상 블록.

    하자의 사용 루아 스크립트는 COUNT 충격의 감각을 얻을 수 있습니다. 서버 자원을 기반으로 결과를 얻을 수 있도록 환경을 사용합니다.

    루아 스크립트 :

    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
    

    여기에서 우리는 레디 스 TIME 명령을 사용합니다. 명령의 반환 :

    100 만 키가 내 컴퓨터에 몇 가지 실행 :

    COUNT    TIME IN MICROSECONDS
       10            37
      100           257
     1000          1685
    10000         14438
    

    주이 시간은 소켓에서 읽을 수와 버퍼 및 응답을 보내는 데 사용되는 시간은 포함되지 않습니다. 실제 시간은 커집니다. 한번 걸리는 시간은 네트워크를 여행하는 것은 당신의 레디 스 서버가 있지만 차단 시간이 아닌 시간을 포함, 레디 스를 벗어났습니다.

    내가 루아 스크립트와 결과를 호출하는 방법입니다 :

    > 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"
    
  2. from https://stackoverflow.com/questions/60055548/is-there-any-recommended-value-of-count-for-scan-hscan-command-in-redis by cc-by-sa and MIT license