diff --git a/examples/scan.js b/examples/scan.js index e315253..2f7a9d4 100644 --- a/examples/scan.js +++ b/examples/scan.js @@ -15,20 +15,33 @@ function scan() { // Update the cursor position for the next scan cursor = res[0]; + // get the SCAN result for this iteration + var keys = res[1]; - // From : - // 'An iteration starts when the cursor is set to 0, - // and terminates when the cursor returned by the server is 0.' - 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 + // 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); + } - if (res[1].length > 0) { - console.log('Array of matching keys', res[1]); + // 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, + // and terminates when the cursor returned by the server is 0.' + if (cursor === '0') { + return console.log('Iteration complete'); } return scan();