2016-10-21 3 views
0

간단한 테스트에서 나는 10k 개의 요소로 된 집합을 가지고 있습니다. 첫 번째 SetScan 커서가 0 커서를 사용하면 전체 집합과 다음 커서가 여러 요소를 반환하고 다른 커서는 정확히 동일한 결과와 커서를 반환한다는 것을 알게되었습니다. 아래StackExchange.Redis SetScan은 모든 집합 멤버를 반환합니다.

코드는 무한 루프에 영향을주지 않는 페이지 크기를 변화

var cursor = 0L; 

do 
{ 
    var result = redis.SetScan("key", cursor: cursor, pageSize: 100); 

    set.AddRange(result); 

    cursor = ((IScanningCursor)result).Cursor; 

} while (cursor > 0); 

에서 실행됩니다.

답변

0

SetScan은 결과를 반복 할 경우 내부적으로 커서를 처리합니다. 이 문맥에서 PageSize는 새 페이지가 필요할 때 SetScan이 SETSCAN에 카운트하는 값입니다. 커서 로직을 직접 처리 할 필요가 없습니다. 그냥 열거 반복 :

foreach(var redisValue in redis.SetScan("key") 
{ 
    set.Add(redisValue); 
} 

커서 노출에 대한 당신은 중간에 열거를 중지하고 대역 외 다른 곳을 계속해야하는 경우.

+0

괜찮습니다. 하지만 난 아직도 내 예제 코드가 제대로 작동하지 않는 이유를 모르겠다. 코드에 문제가 있습니까? – drgraduss

+0

반환 된 커서가 전달 된 커서와 같으면 SetScan이 수행됩니다. 결과에서 반복자를 제한하지 않으므로 첫 번째 호출은 항상 모든 요소를 ​​반환하므로 루프가 필요하지 않습니다. set.AddRange (result); 이터레이터 (결과)가 전체 세트를 가져 오는 데 필요한 모든 Redis 호출을 수행하게합니다. –