diff --git a/examples/scan.js b/examples/scan.js index e3152537cc..2f7a9d405a 100644 --- a/examples/scan.js +++ b/examples/scan.js @@ -15,6 +15,27 @@ function scan() { // Update the cursor position for the next scan cursor = res[0]; + // get the SCAN result for this iteration + var keys = res[1]; + + // Remember: more or less than COUNT or no keys may be returned + // See http://redis.io/commands/scan#the-count-option + // Also, SCAN may return the same key multiple times + // See http://redis.io/commands/scan#scan-guarantees + // Additionally, you should always have the code that uses the keys + // before the code checking the cursor. + if (keys.length > 0) { + console.log('Array of matching keys', keys); + } + + // It's important to note that the cursor and returned keys + // vary independently. The scan is never complete until redis + // returns a non-zero cursor. However, with MATCH and large + // collections, most iterations will return an empty keys array. + + // Still, a cursor of zero DOES NOT mean that there are no keys. + // A zero cursor just means that the SCAN is complete, but there + // might be one last batch of results to process. // From : // 'An iteration starts when the cursor is set to 0, @@ -22,14 +43,6 @@ function scan() { if (cursor === '0') { return console.log('Iteration complete'); } - // Remember: more or less than COUNT or no keys may be returned - // See http://redis.io/commands/scan#the-count-option - // Also, SCAN may return the same key multiple times - // See http://redis.io/commands/scan#scan-guarantees - - if (res[1].length > 0) { - console.log('Array of matching keys', res[1]); - } return scan(); }