feat(dal): RedisCacheService - обновлен метод GetKey, теперь гибкая генерация с hash
This commit is contained in:
@@ -54,8 +54,8 @@
|
||||
/// Сгенерировать уникальный ключ
|
||||
/// </summary>
|
||||
/// <param name="keyParts"></param>
|
||||
/// <param name="isUseHash"></param>
|
||||
/// <param name="keyPartsToHash"></param>
|
||||
/// <returns></returns>
|
||||
string GetKey(string[] keyParts, bool isUseHash = false);
|
||||
string GetKey(string[] keyParts, string[]? keyPartsToHash = null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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() });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -962,7 +962,8 @@ internal class UnitFilterService : IUnitFilterService
|
||||
|
||||
private async Task<List<Guid>> 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<UnitFilterIds>(cacheKey);
|
||||
if (cachedData != null)
|
||||
|
||||
Reference in New Issue
Block a user