From 42ac35319868b9d09cc6ab82e4349c055b93fe64 Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Fri, 20 Mar 2026 12:28:34 +1000 Subject: [PATCH] =?UTF-8?q?feat(dal):=20RedisCacheService=20-=20=D0=BE?= =?UTF-8?q?=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=BE=D0=B4=20GetKey,=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C?= =?UTF-8?q?=20=D0=B3=D0=B8=D0=B1=D0=BA=D0=B0=D1=8F=20=D0=B3=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D1=8F=20=D1=81=20hash?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Cache/Services/Base/IRedisCacheService.cs | 4 ++-- .../Cache/Services/Base/RedisCacheService.cs | 24 ++++++++++++------- .../Implementations/MatchingStatusService.cs | 8 +++---- .../UnitFilterService/UnitFilterService.cs | 3 ++- 4 files changed, 24 insertions(+), 15 deletions(-) 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)