Update massivo CORE x gestione REDIS
- nuova gestioen flushPattern redis (solo master e async e con scan + furbo) - update nuget
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<Version>6.16.2509.1015</Version>
|
||||
<Version>6.16.2509.1211</Version>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>MP_TAB3</RootNamespace>
|
||||
</PropertyGroup>
|
||||
@@ -36,13 +36,13 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="EgwCoreLib.Razor" Version="1.5.2504.907" />
|
||||
<PackageReference Include="EgwCoreLib.Utils" Version="1.5.2504.907" />
|
||||
<PackageReference Include="EgwCoreLib.Razor" Version="1.5.2507.1815" />
|
||||
<PackageReference Include="EgwCoreLib.Utils" Version="1.5.2507.1815" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components" Version="6.0.36" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Http.Connections.Common" Version="6.0.36" />
|
||||
<PackageReference Include="NLog" Version="5.3.4" />
|
||||
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.14" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.8.31" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.9.17" />
|
||||
<PackageReference Include="System.Text.Encodings.Web" Version="6.0.1" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>Modulo MAPOSPEC </i>
|
||||
<h4>Versione: 6.16.2509.1015</h4>
|
||||
<h4>Versione: 6.16.2509.1211</h4>
|
||||
<br /> Note di rilascio:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
6.16.2509.1015
|
||||
6.16.2509.1211
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>6.16.2509.1015</version>
|
||||
<version>6.16.2509.1211</version>
|
||||
<url>https://nexus.steamware.net/repository/SWS/MP-TAB3/stable/LAST/MP-TAB3.zip</url>
|
||||
<changelog>https://nexus.steamware.net/repository/SWS/MP-TAB3/stable/LAST/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
@@ -8,14 +8,14 @@
|
||||
"AllowedHosts": "*",
|
||||
"CodApp": "MP.TAB",
|
||||
"ConnectionStrings": {
|
||||
//"Redis": "redis.ufficio:26379,serviceName=devel,DefaultDatabase=6,connectTimeout=15000,syncTimeout=15000,asyncTimeout=15000,abortConnect=false,ssl=false,allowAdmin=true",
|
||||
//"Redis": "redis.ufficio:26379,serviceName=devel,DefaultDatabase=6,connectTimeout=5000,syncTimeout=5000,asyncTimeout=5000,abortConnect=false,ssl=false,allowAdmin=true",
|
||||
//"MP.All": "Server=SQL2022PROD;Database=Donati_LAV_MoonPro_prod; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.TAB3;",
|
||||
//"MP.Mon": "Server=SQL2022PROD;Database=Donati_LAV_MoonPro_prod; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.TAB3;",
|
||||
//"MP.IS": "Server=SQL2022PROD;Database=MoonPro_IS_EdilChim; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.INVE;",
|
||||
//"MP.Tab": "Server=SQL2022PROD;Database=Donati_LAV_MoonPro_prod; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.TAB3;",
|
||||
//"MP.Mag": "Server=SQL2022PROD;Database=MoonPro_MAG; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.TAB3;"
|
||||
|
||||
"Redis": "redis.ufficio:26379,serviceName=devel,DefaultDatabase=5,connectTimeout=15000,syncTimeout=15000,asyncTimeout=15000,abortConnect=false,ssl=false,allowAdmin=true",
|
||||
"Redis": "redis.ufficio:26379,serviceName=devel,DefaultDatabase=5,connectTimeout=5000,syncTimeout=5000,asyncTimeout=5000,abortConnect=false,ssl=false,allowAdmin=true",
|
||||
"MP.All": "Server=SQL2016DEV;Database=MoonPro; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.TAB3;",
|
||||
"MP.Mon": "Server=SQL2016DEV;Database=MoonPro; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.TAB3;",
|
||||
"MP.IS": "Server=SQL2016DEV;Database=MoonPro_IS_EdilChim; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.INVE;",
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
<PackageReference Include="NLog" Version="5.3.4" />
|
||||
<PackageReference Include="RestSharp" Version="112.0.0" />
|
||||
<PackageReference Include="SharpZipLib" Version="1.4.2" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.8.31" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.9.17" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -655,13 +655,44 @@ namespace MP.AppAuth.Services
|
||||
#region Private Methods
|
||||
|
||||
/// <summary>
|
||||
/// Esegue flush memoria redis dato pattern
|
||||
/// Esegue flush memoria redis dato pat2Flush
|
||||
/// </summary>
|
||||
/// <param name="pattern"></param>
|
||||
/// <param name="pat2Flush"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<bool> ExecFlushRedisPattern(RedisValue pattern)
|
||||
private async Task<bool> ExecFlushRedisPattern(RedisValue pat2Flush)
|
||||
{
|
||||
bool answ = false;
|
||||
var masterEndpoint = redisConn.GetEndPoints()
|
||||
.Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
|
||||
.FirstOrDefault();
|
||||
|
||||
// sepattern è "*" 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<Task>();
|
||||
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)
|
||||
{
|
||||
@@ -676,7 +707,8 @@ namespace MP.AppAuth.Services
|
||||
}
|
||||
answ = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return answ;
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.8.31" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.9.17" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Blazored.LocalStorage" Version="4.5.0" />
|
||||
<PackageReference Include="Blazored.SessionStorage" Version="2.4.0" />
|
||||
<PackageReference Include="EgwCoreLib.Utils" Version="1.5.2504.907" />
|
||||
<PackageReference Include="EgwCoreLib.Utils" Version="1.5.2507.1815" />
|
||||
<PackageReference Include="MailKit" Version="4.7.1.1" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components" Version="6.0.36" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Http.Connections.Common" Version="6.0.36" />
|
||||
@@ -47,7 +47,7 @@
|
||||
<PackageReference Include="NLog" Version="5.3.4" />
|
||||
<PackageReference Include="RestSharp" Version="112.0.0" />
|
||||
<PackageReference Include="SharpZipLib" Version="1.4.2" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.8.31" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.9.17" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -287,13 +287,44 @@ namespace MP.Data.Services
|
||||
#region Private Methods
|
||||
|
||||
/// <summary>
|
||||
/// Esegue flush memoria redisConn dato pattern
|
||||
/// Esegue flush memoria redisConn dato pat2Flush
|
||||
/// </summary>
|
||||
/// <param name="pattern"></param>
|
||||
/// <param name="pat2Flush"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<bool> ExecFlushRedisPattern(RedisValue pattern)
|
||||
private async Task<bool> ExecFlushRedisPattern(RedisValue pat2Flush)
|
||||
{
|
||||
bool answ = false;
|
||||
var masterEndpoint = redisConn.GetEndPoints()
|
||||
.Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
|
||||
.FirstOrDefault();
|
||||
|
||||
// sepattern è "*" 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<Task>();
|
||||
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)
|
||||
{
|
||||
@@ -308,7 +339,8 @@ namespace MP.Data.Services
|
||||
}
|
||||
answ = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return answ;
|
||||
}
|
||||
|
||||
@@ -420,13 +420,43 @@ namespace MP.Data.Services
|
||||
#region Private Methods
|
||||
|
||||
/// <summary>
|
||||
/// Esegue flush memoria redisConn dato pattern
|
||||
/// Esegue flush memoria redisConn dato pat2Flush
|
||||
/// </summary>
|
||||
/// <param name="pattern"></param>
|
||||
/// <param name="pat2Flush"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<bool> ExecFlushRedisPattern(RedisValue pattern)
|
||||
private async Task<bool> ExecFlushRedisPattern(RedisValue pat2Flush)
|
||||
{
|
||||
bool answ = false;
|
||||
var masterEndpoint = redisConn.GetEndPoints()
|
||||
.Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
|
||||
.FirstOrDefault();
|
||||
// sepattern è "*" 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<Task>();
|
||||
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)
|
||||
{
|
||||
@@ -441,7 +471,8 @@ namespace MP.Data.Services
|
||||
}
|
||||
answ = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return answ;
|
||||
}
|
||||
|
||||
|
||||
@@ -3983,13 +3983,47 @@ namespace MP.Data.Services
|
||||
#region Private Methods
|
||||
|
||||
/// <summary>
|
||||
/// Esegue flush memoria redisConn dato pattern, metodo sincrono
|
||||
/// Esegue flush memoria redisConn dato pat2Flush, metodo sincrono
|
||||
/// </summary>
|
||||
/// <param name="pattern"></param>
|
||||
/// <param name="pat2Flush"></param>
|
||||
/// <returns></returns>
|
||||
private bool ExecFlushRedisPattern(RedisValue pattern)
|
||||
private bool ExecFlushRedisPattern(RedisValue pat2Flush)
|
||||
{
|
||||
bool answ = false;
|
||||
var masterEndpoint = redisConn.GetEndPoints()
|
||||
.Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
|
||||
.FirstOrDefault();
|
||||
|
||||
// sepattern è "*" 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 batch = new List<RedisKey>();
|
||||
foreach (var key in keys)
|
||||
{
|
||||
batch.Add(key);
|
||||
|
||||
// Flush in batches of 1000
|
||||
if (batch.Count >= 1000)
|
||||
{
|
||||
foreach (var item in batch)
|
||||
redisDb.KeyDelete(item);
|
||||
|
||||
batch.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
// Flush remaining keys
|
||||
foreach (var item in batch)
|
||||
redisDb.KeyDelete(item);
|
||||
}
|
||||
answ = true;
|
||||
#if false
|
||||
var listEndpoints = redisConn.GetEndPoints();
|
||||
foreach (var endPoint in listEndpoints)
|
||||
{
|
||||
@@ -4004,28 +4038,61 @@ namespace MP.Data.Services
|
||||
}
|
||||
answ = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// notifico update ai client in ascolto x reset cache
|
||||
NotifyReloadRequest($"FlushRedisCache | {pattern}");
|
||||
NotifyReloadRequest($"FlushRedisCache | {pat2Flush}");
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Esegue flush memoria redisConn dato pattern in async
|
||||
/// Esegue flush memoria redisConn dato pat2Flush in async
|
||||
/// </summary>
|
||||
/// <param name="pattern"></param>
|
||||
/// <param name="pat2Flush"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<bool> ExecFlushRedisPatternAsync(RedisValue pattern)
|
||||
private async Task<bool> ExecFlushRedisPatternAsync(RedisValue pat2Flush)
|
||||
{
|
||||
bool answ = false;
|
||||
var masterEndpoint = redisConn.GetEndPoints()
|
||||
.Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
|
||||
.FirstOrDefault();
|
||||
|
||||
// sepattern è "*" 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<Task>();
|
||||
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)
|
||||
{
|
||||
//var server = redisConnAdmin.GetServer(listEndpoints[0]);
|
||||
var server = redisConn.GetServer(endPoint);
|
||||
if (server != null)
|
||||
{
|
||||
var keyList = server.Keys(redisDb.Database, pattern);
|
||||
var keyList = server.Keys(redisDb.Database, pat2Flush);
|
||||
foreach (var item in keyList)
|
||||
{
|
||||
await redisDb.KeyDeleteAsync(item);
|
||||
@@ -4033,8 +4100,9 @@ namespace MP.Data.Services
|
||||
answ = true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// notifico update ai client in ascolto x reset cache
|
||||
NotifyReloadRequest($"FlushRedisCache | {pattern}");
|
||||
NotifyReloadRequest($"FlushRedisCache | {pat2Flush}");
|
||||
return answ;
|
||||
}
|
||||
|
||||
|
||||
@@ -254,13 +254,44 @@ namespace MP.Data.Services
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Esegue flush memoria redisConn dato pattern
|
||||
/// Esegue flush memoria redisConn dato pat2Flush
|
||||
/// </summary>
|
||||
/// <param name="pattern"></param>
|
||||
/// <param name="pat2Flush"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<bool> ExecFlushRedisPattern(RedisValue pattern)
|
||||
private async Task<bool> ExecFlushRedisPattern(RedisValue pat2Flush)
|
||||
{
|
||||
bool answ = false;
|
||||
var masterEndpoint = redisConn.GetEndPoints()
|
||||
.Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
|
||||
.FirstOrDefault();
|
||||
|
||||
// sepattern è "*" 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<Task>();
|
||||
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)
|
||||
{
|
||||
@@ -275,7 +306,8 @@ namespace MP.Data.Services
|
||||
}
|
||||
answ = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return answ;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<RootNamespace>MP.Land</RootNamespace>
|
||||
<Version>6.16.2507.1008</Version>
|
||||
<Version>6.16.2509.1211</Version>
|
||||
<Configurations>Debug;Release;Debug_LiManDebug</Configurations>
|
||||
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
|
||||
<RunAnalyzersDuringBuild>True</RunAnalyzersDuringBuild>
|
||||
@@ -51,15 +51,12 @@
|
||||
<PackageReference Include="Blazored.LocalStorage" Version="4.5.0" />
|
||||
<PackageReference Include="Blazored.SessionStorage" Version="2.4.0" />
|
||||
<PackageReference Include="DiffMatchPatch" Version="1.0.3" />
|
||||
<PackageReference Include="EgwCoreLib.Razor" Version="1.5.2506.3019" />
|
||||
<PackageReference Include="EgwCoreLib.Utils" Version="1.5.2506.3019" />
|
||||
<PackageReference Include="Majorsoft.Blazor.Components.Debounce" Version="1.5.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.Negotiate" Version="6.0.11" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.14" />
|
||||
<PackageReference Include="RestSharp" Version="112.0.0" />
|
||||
<PackageReference Include="SharpZipLib" Version="1.4.2" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.8.31" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>Modulo Tablet MAPO - DotNet6</i>
|
||||
<h4>Versione: 6.16.2507.1008</h4>
|
||||
<h4>Versione: 6.16.2509.1211</h4>
|
||||
<br />
|
||||
Note di rilascio:
|
||||
<ul>
|
||||
|
||||
@@ -1 +1 @@
|
||||
6.16.2507.1008
|
||||
6.16.2509.1211
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>6.16.2507.1008</version>
|
||||
<version>6.16.2509.1211</version>
|
||||
<url>https://nexus.steamware.net/repository/SWS/MP-LAND/stable/LAST/MP.Land.zip</url>
|
||||
<changelog>https://nexus.steamware.net/repository/SWS/MP-LAND/stable/LAST/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>MP.MON</RootNamespace>
|
||||
<AssemblyName>$(AssemblyName.Replace(' ', '_'))</AssemblyName>
|
||||
<Version>6.16.2506.3014</Version>
|
||||
<Version>6.16.2509.1210</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>Modulo MAPOSPEC </i>
|
||||
<h4>Versione: 6.16.2506.3014</h4>
|
||||
<h4>Versione: 6.16.2509.1210</h4>
|
||||
<br /> Note di rilascio:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
6.16.2506.3014
|
||||
6.16.2509.1210
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>6.16.2506.3014</version>
|
||||
<version>6.16.2509.1210</version>
|
||||
<url>https://nexus.steamware.net/repository/SWS/MP-MON/stable/LAST/MP.MON.zip</url>
|
||||
<changelog>https://nexus.steamware.net/repository/SWS/MP-MON/stable/LAST/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
@@ -887,11 +887,45 @@ namespace MP.SPEC.Data
|
||||
/// <summary>
|
||||
/// Esegue flush memoria redis dato keyVal
|
||||
/// </summary>
|
||||
/// <param name="pattern"></param>
|
||||
/// <param name="pat2Flush"></param>
|
||||
/// <returns></returns>
|
||||
public bool ExecFlushRedisPattern(string pattern)
|
||||
public bool ExecFlushRedisPattern(string pat2Flush)
|
||||
{
|
||||
bool answ = false;
|
||||
var masterEndpoint = redisConn.GetEndPoints()
|
||||
.Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
|
||||
.FirstOrDefault();
|
||||
|
||||
// sepattern è "*" 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 batch = new List<RedisKey>();
|
||||
foreach (var key in keys)
|
||||
{
|
||||
batch.Add(key);
|
||||
|
||||
// Flush in batches of 1000
|
||||
if (batch.Count >= 1000)
|
||||
{
|
||||
foreach (var item in batch)
|
||||
redisDb.KeyDelete(item);
|
||||
|
||||
batch.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
// Flush remaining keys
|
||||
foreach (var item in batch)
|
||||
redisDb.KeyDelete(item);
|
||||
}
|
||||
answ = true;
|
||||
#if false
|
||||
var listEndpoints = redisConnAdmin.GetEndPoints();
|
||||
foreach (var endPoint in listEndpoints)
|
||||
{
|
||||
@@ -906,18 +940,50 @@ namespace MP.SPEC.Data
|
||||
}
|
||||
answ = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Esegue flush memoria redis dato keyVal, async
|
||||
/// </summary>
|
||||
/// <param name="pattern"></param>
|
||||
/// <param name="pat2Flush"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> ExecFlushRedisPatternAsync(RedisValue pattern)
|
||||
public async Task<bool> ExecFlushRedisPatternAsync(RedisValue pat2Flush)
|
||||
{
|
||||
bool answ = false;
|
||||
var masterEndpoint = redisConn.GetEndPoints()
|
||||
.Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
|
||||
.FirstOrDefault();
|
||||
|
||||
// sepattern è "*" 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<Task>();
|
||||
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 = redisConnAdmin.GetEndPoints();
|
||||
foreach (var endPoint in listEndpoints)
|
||||
{
|
||||
@@ -931,7 +997,8 @@ namespace MP.SPEC.Data
|
||||
}
|
||||
answ = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return answ;
|
||||
}
|
||||
@@ -2313,7 +2380,7 @@ namespace MP.SPEC.Data
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Effettua conteggio chaivi REDIS dato pattern ricerca
|
||||
/// Effettua conteggio chaivi REDIS dato pat2Flush ricerca
|
||||
/// </summary>
|
||||
/// <param name="keyPattern"></param>
|
||||
/// <returns></returns>
|
||||
@@ -2848,8 +2915,9 @@ namespace MP.SPEC.Data
|
||||
|
||||
#region Private Methods
|
||||
|
||||
#if false
|
||||
/// <summary>
|
||||
/// Esegue flush memoria redis dato pattern
|
||||
/// Esegue flush memoria redis dato pat2Flush
|
||||
/// </summary>
|
||||
/// <param name="pattern"></param>
|
||||
/// <returns></returns>
|
||||
@@ -2874,7 +2942,8 @@ namespace MP.SPEC.Data
|
||||
// notifico DoUpdate ai client in ascolto x reset cache
|
||||
NotifyReloadRequest($"FlushRedisCache | {pattern}");
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
private async Task<bool> POdlFlushCache()
|
||||
{
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>MP.SPEC</RootNamespace>
|
||||
<Version>6.16.2509.214</Version>
|
||||
<Version>6.16.2509.1211</Version>
|
||||
<UserSecretsId>1800a78a-6ff1-40f9-b490-87fb8bfc1394</UserSecretsId>
|
||||
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
|
||||
</PropertyGroup>
|
||||
@@ -41,13 +41,10 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Blazored.LocalStorage" Version="4.5.0" />
|
||||
<PackageReference Include="Blazored.SessionStorage" Version="2.4.0" />
|
||||
<PackageReference Include="EgwCoreLib.Razor" Version="1.5.2504.907" />
|
||||
<PackageReference Include="EgwCoreLib.Utils" Version="1.5.2504.907" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.Negotiate" Version="6.0.36" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components" Version="6.0.36" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.14" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.8.31" />
|
||||
<PackageReference Include="System.Text.Encodings.Web" Version="6.0.1" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>Modulo MAPOSPEC </i>
|
||||
<h4>Versione: 6.16.2509.214</h4>
|
||||
<h4>Versione: 6.16.2509.1211</h4>
|
||||
<br /> Note di rilascio:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
6.16.2509.214
|
||||
6.16.2509.1211
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>6.16.2509.214</version>
|
||||
<version>6.16.2509.1211</version>
|
||||
<url>https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/MP.SPEC.zip</url>
|
||||
<changelog>https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
@@ -825,13 +825,44 @@ namespace MP.Stats.Data
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Esegue flush memoria redis dato pattern
|
||||
/// Esegue flush memoria redis dato pat2Flush
|
||||
/// </summary>
|
||||
/// <param name="pattern"></param>
|
||||
/// <param name="pat2Flush"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<bool> ExecFlushRedisPattern(RedisValue pattern)
|
||||
private async Task<bool> ExecFlushRedisPattern(RedisValue pat2Flush)
|
||||
{
|
||||
bool answ = false;
|
||||
var masterEndpoint = redisConn.GetEndPoints()
|
||||
.Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
|
||||
.FirstOrDefault();
|
||||
|
||||
// sepattern è "*" 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<Task>();
|
||||
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)
|
||||
{
|
||||
@@ -846,9 +877,10 @@ namespace MP.Stats.Data
|
||||
}
|
||||
answ = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// notifico update ai client in ascolto x reset cache
|
||||
NotifyReloadRequest($"FlushRedisCache | {pattern}");
|
||||
NotifyReloadRequest($"FlushRedisCache | {pat2Flush}");
|
||||
return answ;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<RootNamespace>MP.Stats</RootNamespace>
|
||||
<UserSecretsId>826e877c-ba70-4253-84cb-d0b1cafd4440</UserSecretsId>
|
||||
<Version>6.16.2508.0515</Version>
|
||||
<Version>6.16.2508.0515</Version>
|
||||
<Version>6.16.2509.1211</Version>
|
||||
<Version>6.16.2509.1211</Version>
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
<NoWarn>$(NoWarn);1591</NoWarn>
|
||||
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
|
||||
@@ -196,7 +196,6 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="EgwCoreLib.Razor" Version="1.5.2504.907" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components" Version="6.0.36" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.12" />
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>Modulo statistiche MAPO</i>
|
||||
<h4>Versione: 6.16.2508.0515</h4>
|
||||
<h4>Versione: 6.16.2509.1211</h4>
|
||||
<br />
|
||||
Note di rilascio:
|
||||
<ul>
|
||||
|
||||
@@ -1 +1 @@
|
||||
6.16.2508.0515
|
||||
6.16.2509.1211
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>6.16.2508.0515</version>
|
||||
<version>6.16.2509.1211</version>
|
||||
<url>https://nexus.steamware.net/repository/SWS/MP-STATS/stable/LAST/MP.Stats.zip</url>
|
||||
<changelog>https://nexus.steamware.net/repository/SWS/MP-STATS/stable/LAST/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="EgwCoreLib.Razor" Version="1.5.2504.907" />
|
||||
<PackageReference Include="EgwCoreLib.Utils" Version="1.5.2504.907" />
|
||||
<PackageReference Include="EgwCoreLib.Razor" Version="1.5.2507.1815" />
|
||||
<PackageReference Include="EgwCoreLib.Utils" Version="1.5.2507.1815" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="6.0.36" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.36" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.36">
|
||||
@@ -26,7 +26,7 @@
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="NLog" Version="5.3.4" />
|
||||
<PackageReference Include="RestSharp" Version="112.0.0" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.8.31" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.9.17" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -399,13 +399,47 @@ namespace MP.TaskMan.Services
|
||||
#region Private Methods
|
||||
|
||||
/// <summary>
|
||||
/// Esegue flush memoria redis dato pattern
|
||||
/// Esegue flush memoria redis dato pat2Flush
|
||||
/// </summary>
|
||||
/// <param name="pattern"></param>
|
||||
/// <param name="pat2Flush"></param>
|
||||
/// <returns></returns>
|
||||
private bool ExecFlushRedisPattern(RedisValue pattern)
|
||||
private bool ExecFlushRedisPattern(RedisValue pat2Flush)
|
||||
{
|
||||
bool answ = false;
|
||||
var masterEndpoint = redisConn.GetEndPoints()
|
||||
.Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
|
||||
.FirstOrDefault();
|
||||
|
||||
// sepattern è "*" 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 batch = new List<RedisKey>();
|
||||
foreach (var key in keys)
|
||||
{
|
||||
batch.Add(key);
|
||||
|
||||
// Flush in batches of 1000
|
||||
if (batch.Count >= 1000)
|
||||
{
|
||||
foreach (var item in batch)
|
||||
redisDb.KeyDelete(item);
|
||||
|
||||
batch.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
// Flush remaining keys
|
||||
foreach (var item in batch)
|
||||
redisDb.KeyDelete(item);
|
||||
}
|
||||
answ = true;
|
||||
#if false
|
||||
var listEndpoints = redisConn.GetEndPoints();
|
||||
foreach (var endPoint in listEndpoints)
|
||||
{
|
||||
@@ -420,20 +454,52 @@ namespace MP.TaskMan.Services
|
||||
}
|
||||
answ = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// notifico update ai client in ascolto x reset cache
|
||||
NotifyReloadRequest($"FlushRedisCache | {pattern}");
|
||||
NotifyReloadRequest($"FlushRedisCache | {pat2Flush}");
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Esegue flush memoria redis dato pattern modalità Async
|
||||
/// Esegue flush memoria redis dato pat2Flush modalità Async
|
||||
/// </summary>
|
||||
/// <param name="pattern"></param>
|
||||
/// <param name="pat2Flush"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<bool> ExecFlushRedisPatternAsync(RedisValue pattern)
|
||||
private async Task<bool> ExecFlushRedisPatternAsync(RedisValue pat2Flush)
|
||||
{
|
||||
bool answ = false;
|
||||
var masterEndpoint = redisConn.GetEndPoints()
|
||||
.Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
|
||||
.FirstOrDefault();
|
||||
|
||||
// sepattern è "*" 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<Task>();
|
||||
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)
|
||||
{
|
||||
@@ -448,9 +514,10 @@ namespace MP.TaskMan.Services
|
||||
}
|
||||
answ = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// notifico update ai client in ascolto x reset cache
|
||||
NotifyReloadRequest($"FlushRedisCache | {pattern}");
|
||||
NotifyReloadRequest($"FlushRedisCache | {pat2Flush}");
|
||||
return answ;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user