diff --git a/PARR.DAL/Cache/Services/Base/IRedisCacheService.cs b/PARR.DAL/Cache/Services/Base/IRedisCacheService.cs index 881fdf8a..c16c5d12 100644 --- a/PARR.DAL/Cache/Services/Base/IRedisCacheService.cs +++ b/PARR.DAL/Cache/Services/Base/IRedisCacheService.cs @@ -54,8 +54,8 @@ /// Сгенерировать уникальный ключ /// /// - /// + /// /// - string GetKey(string[] keyParts, bool isUseHash = false); + string GetKey(string[] keyParts, string[]? keyPartsToHash = null); } } diff --git a/PARR.DAL/Cache/Services/Base/RedisCacheService.cs b/PARR.DAL/Cache/Services/Base/RedisCacheService.cs index 38c902be..9516a1f9 100644 --- a/PARR.DAL/Cache/Services/Base/RedisCacheService.cs +++ b/PARR.DAL/Cache/Services/Base/RedisCacheService.cs @@ -70,25 +70,33 @@ namespace PARR.DAL.Cache.Services.Base } - public string GetKey(string[] keyParts, bool isUseHash = false) + public string GetKey(string[] keyParts, string[]? keyPartsToHash = null) { + // разделитель между ИД + var mainSeparator = "_"; + // разделитель между словами + var wordSeparator = "-"; + if (keyParts.Length == 0) { throw new ArgumentNullException("keyParts не может быть пустым"); } - var keyStr = string.Join("_", keyParts); + var keyStr = string.Join(mainSeparator, keyParts).Replace(" ", wordSeparator); - if (isUseHash) + if (keyPartsToHash != null && keyPartsToHash.Length > 0) { - using var sha256 = System.Security.Cryptography.SHA256.Create(); - var hashedBytes = sha256.ComputeHash(System.Text.Encoding.UTF8.GetBytes(keyStr)); + var partsToHashStr = string.Join(mainSeparator, keyPartsToHash).Replace(" ", wordSeparator); - // return Convert.ToBase64String(hashedBytes).Replace('+', '-').Replace('/', '_').Substring(0, 16); - return Convert.ToBase64String(hashedBytes).Substring(0, 16); + using var sha256 = System.Security.Cryptography.SHA256.Create(); + var hashedBytes = sha256.ComputeHash(System.Text.Encoding.UTF8.GetBytes(partsToHashStr)); + + var base64str = Convert.ToBase64String(hashedBytes).Substring(0, 16); + + return (keyStr + mainSeparator + base64str).ToLower(); } - return keyStr; + return keyStr.ToLower(); } } diff --git a/PARR.DAL/DomainServices/Implementations/MatchingStatusService.cs b/PARR.DAL/DomainServices/Implementations/MatchingStatusService.cs index 799236e1..deea3cb4 100644 --- a/PARR.DAL/DomainServices/Implementations/MatchingStatusService.cs +++ b/PARR.DAL/DomainServices/Implementations/MatchingStatusService.cs @@ -102,19 +102,19 @@ namespace PARR.DAL.DomainServices.Implementations switch (type) { case SyncTaskEntityTypeEnum.Job: - typeStr = "j"; + typeStr = "job"; break; case SyncTaskEntityTypeEnum.JobGroup: - typeStr = "g"; + typeStr = "group"; break; case SyncTaskEntityTypeEnum.Template: - typeStr = "t"; + typeStr = "template"; break; default: break; } - return redisCacheService.GetKey(new string[] { "ms", typeStr, id.ToString() }); + return redisCacheService.GetKey(new string[] { "matching", typeStr, id.ToString() }); } } } diff --git a/PARR.DAL/DomainServices/UnitFilterService/UnitFilterService.cs b/PARR.DAL/DomainServices/UnitFilterService/UnitFilterService.cs index ea19feed..e8299f49 100644 --- a/PARR.DAL/DomainServices/UnitFilterService/UnitFilterService.cs +++ b/PARR.DAL/DomainServices/UnitFilterService/UnitFilterService.cs @@ -962,7 +962,8 @@ internal class UnitFilterService : IUnitFilterService private async Task> GetUnitIdsFromCacheOrDbAsync(JobUnitFilter filter, CancellationToken cancellationToken = default) { - var cacheKey = cacheService.GetKey(new[] { "uf_ids", filter.UnitFilter }, isUseHash: true); + // var cacheKey = cacheService.GetKey(new[] { "uf_ids", filter.UnitFilter }, isUseHash: true); + var cacheKey = cacheService.GetKey(new[] { "unit filter", "unit name mask" }, new[] { filter.UnitFilter }); var cachedData = await cacheService.GetCachedDataAsync(cacheKey); if (cachedData != null)