@@ -658,15 +658,27 @@ async Task IEntityStoreAsync.DeleteByIdsAsync<T>(ICollection ids, CancellationTo
658658 }
659659
660660 async Task IEntityStoreAsync . DeleteAllAsync < T > ( CancellationToken token )
661+ {
662+ await DeleteAllAsync < T > ( 0 , RedisConfig . DeleteAllBatchSize , token ) . ConfigureAwait ( false ) ;
663+ }
664+
665+ private async Task DeleteAllAsync < T > ( ulong cursor , int pageSize , CancellationToken token )
661666 {
662667 var typeIdsSetKey = this . GetTypeIdsSetKey < T > ( ) ;
663- var ids = await AsAsync ( ) . GetAllItemsFromSetAsync ( typeIdsSetKey , token ) . ConfigureAwait ( false ) ;
664- if ( ids . Count > 0 )
668+ var callCount = 0 ;
669+ while ( cursor != 0 || callCount == 0 )
665670 {
666- var urnKeys = ids . ToList ( ) . ConvertAll ( UrnKey < T > ) ;
667- await AsAsync ( ) . RemoveEntryAsync ( urnKeys . ToArray ( ) , token ) . ConfigureAwait ( false ) ;
668- await AsAsync ( ) . RemoveAsync ( typeIdsSetKey , token ) . ConfigureAwait ( false ) ;
671+ var scanResult = await NativeAsync . SScanAsync ( typeIdsSetKey , cursor , pageSize , token : token ) . ConfigureAwait ( false ) ;
672+ callCount ++ ;
673+ cursor = scanResult . Cursor ;
674+ var ids = scanResult . Results . Select ( x => x . FromUtf8Bytes ( ) ) ;
675+ var urnKeys = ids . Map ( t => AsAsync ( ) . UrnKey < T > ( t ) ) ;
676+ if ( urnKeys . Count > 0 )
677+ {
678+ await AsAsync ( ) . RemoveEntryAsync ( urnKeys . ToArray ( ) , token ) . ConfigureAwait ( false ) ;
679+ }
669680 }
681+ await AsAsync ( ) . RemoveEntryAsync ( new [ ] { typeIdsSetKey } , token ) . ConfigureAwait ( false ) ;
670682 }
671683
672684 ValueTask < List < string > > IRedisClientAsync . SearchSortedSetAsync ( string setId , string start , string end , int ? skip , int ? take , CancellationToken token )
0 commit comments