feat(core, infrastructure): IRedisCacheService - данные теперь можно архивировать

This commit is contained in:
Mikhail Trubnikov
2026-05-07 12:27:57 +10:00
parent 277bf0caa3
commit 395ef6a0ea
4 changed files with 164 additions and 52 deletions

View File

@@ -0,0 +1,51 @@
using System.IO.Compression;
namespace PARR.Infrastructure.Redis.Helpers
{
/// <summary>
/// Архивация/разарзивация данных
/// </summary>
internal static class CompressionHelper
{
// Не сжимать маленькие значения
private const int MinCompressionSize = 1024; // 1Кб
/// <summary>
/// Сжать
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static byte[] Compress(byte[] data)
{
if (data.Length < MinCompressionSize)
return data;
using var output = new MemoryStream();
using (var gzip = new GZipStream(output, CompressionLevel.Optimal))
{
gzip.Write(data, 0, data.Length);
}
return output.ToArray();
}
/// <summary>
/// Разархивировать если это GZip
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static byte[] Decompress(byte[] data)
{
// Проверяем сигнатуру GZip (0x1F, 0x8B)
if (data.Length < 2 || data[0] != 0x1F || data[1] != 0x8B)
return data; // Не сжато
using var input = new MemoryStream(data);
using var gzip = new GZipStream(input, CompressionMode.Decompress);
using var output = new MemoryStream();
gzip.CopyTo(output);
return output.ToArray();
}
}
}