@@ -290,20 +290,18 @@ impl RedisClient {
290290 let can_continue = value. has_more ( ) ;
291291 let mut scanned_keys = value. take_results ( ) . unwrap_or_default ( ) ;
292292
293- // Record scanned count.
294- let scanned_keys_len = scanned_keys. len ( ) as u32 ;
295- scanned_count. fetch_add ( scanned_keys_len, Ordering :: Relaxed ) ;
296-
297293 // Append
298294 keys. append ( & mut scanned_keys) ;
299295
296+ // Record scanned count.
297+ // Use keys.len() to use the `.with_capacity` related functionality.
298+ scanned_count. fetch_add ( keys. len ( ) as u32 , Ordering :: Relaxed ) ;
299+
300300 // If we scanned enough items
301301 // or cannot scan anymore.
302302 let scanned_count_raw = scanned_count. load ( Ordering :: Relaxed ) ;
303303 let scanned_enough = scanned_count_raw >= needed_count || !can_continue;
304304 if scanned_enough {
305- scanned_count. fetch_and ( keys. len ( ) as u32 , Ordering :: Relaxed ) ;
306-
307305 sx. send ( Ok ( RedisScannerResult { keys, can_continue } ) )
308306 . unwrap ( ) ;
309307 sent = true ;
@@ -373,11 +371,27 @@ impl RedisClient {
373371 & mut self ,
374372 pattern : String ,
375373 iter_count : u32 ,
376- needed_count : u32 ,
374+ offset : Option < u32 > ,
377375 r#type : Option < ScanType > ,
378376 ) -> Result < RedisScannerResult > {
379- self . _invoke_new_scan ( pattern, iter_count. max ( needed_count) , needed_count, r#type)
380- . await ?;
377+ let needed_count = if self . scanner . is_some ( ) {
378+ self . scanner
379+ . as_ref ( )
380+ . unwrap ( )
381+ . scanned_count
382+ . load ( Ordering :: Relaxed )
383+ } else {
384+ iter_count
385+ } ;
386+
387+ self . _invoke_new_scan (
388+ pattern,
389+ iter_count,
390+ // Add offset until reaching the maximum num.
391+ needed_count. saturating_add ( offset. unwrap_or_default ( ) ) ,
392+ r#type,
393+ )
394+ . await ?;
381395
382396 // Continue scan.
383397 let scanner = self . scanner . as_mut ( ) . unwrap ( ) ;
0 commit comments