From 7640156f85fbc0773ec48e89ae18e7f55ff39729 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 12 Sep 2025 15:46:21 +0200 Subject: [PATCH] Fix flush in altro ambito --- GPW.CORE.Smart8/Data/CoreSmartDataService.cs | 41 ++++++++++++++++++-- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/GPW.CORE.Smart8/Data/CoreSmartDataService.cs b/GPW.CORE.Smart8/Data/CoreSmartDataService.cs index 532dd50..43357ac 100644 --- a/GPW.CORE.Smart8/Data/CoreSmartDataService.cs +++ b/GPW.CORE.Smart8/Data/CoreSmartDataService.cs @@ -1640,13 +1640,45 @@ namespace GPW.CORE.Smart8.Data #region Private Methods /// - /// Esegue flush memoria redis dato pattern + /// Esegue flush memoria redis dato pat2Flush /// - /// + /// /// - private async Task ExecFlushRedisPattern(RedisValue pattern) + private async Task ExecFlushRedisPattern(RedisValue pat2Flush) { bool answ = false; + var masterEndpoint = redisConn.GetEndPoints() + .Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica) + .FirstOrDefault(); + + // se pat2Flush รจ "*" elimino intero DB... + if (masterEndpoint != null && (pat2Flush.Equals(new RedisValue("*")) || pat2Flush == RedisValue.Null)) + { + redisConn.GetServer(masterEndpoint).FlushDatabase(database: redisDb.Database); + } + else + { + var server = redisConn.GetServer(masterEndpoint); + var keys = server.Keys(database: redisDb.Database, pattern: pat2Flush, pageSize: 1000); + + var deleteTasks = new List(); + foreach (var key in keys) + { + deleteTasks.Add(redisDb.KeyDeleteAsync(key)); + if (deleteTasks.Count >= 1000) + { + await Task.WhenAll(deleteTasks); + deleteTasks.Clear(); + } + } + if (deleteTasks.Count > 0) + { + await Task.WhenAll(deleteTasks); + } + } + answ = true; + +#if false var listEndpoints = redisConn.GetEndPoints(); foreach (var endPoint in listEndpoints) { @@ -1661,7 +1693,8 @@ namespace GPW.CORE.Smart8.Data } answ = true; } - } + } +#endif return answ; }