2026-04-14 16:27:27 +10:00
|
|
|
|
namespace PARR.Core.Common.Interfaces
|
2023-11-30 16:18:14 +10:00
|
|
|
|
{
|
2026-04-14 16:27:27 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Сервис по управлению КЭШ
|
|
|
|
|
|
/// </summary>
|
2023-11-30 16:18:14 +10:00
|
|
|
|
public interface IRedisCacheService
|
|
|
|
|
|
{
|
2026-05-07 12:27:57 +10:00
|
|
|
|
///// <summary>
|
|
|
|
|
|
///// Получить кэшированные данные
|
|
|
|
|
|
///// </summary>
|
|
|
|
|
|
///// <typeparam name="T"></typeparam>
|
|
|
|
|
|
///// <param name="key"></param>
|
|
|
|
|
|
///// <returns></returns>
|
|
|
|
|
|
//T? GetCachedData<T>(string key);
|
2023-11-30 16:18:14 +10:00
|
|
|
|
|
2023-12-06 10:20:20 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Получить кэшированные данные асинхронно
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <typeparam name="T"></typeparam>
|
|
|
|
|
|
/// <param name="key"></param>
|
2026-05-07 12:27:57 +10:00
|
|
|
|
/// <param name="useCompression">Разрешить сжатие данных</param>
|
2023-12-06 10:20:20 +10:00
|
|
|
|
/// <returns></returns>
|
2026-05-07 12:27:57 +10:00
|
|
|
|
Task<T?> GetCachedDataAsync<T>(string key, bool useCompression = false);
|
2023-11-30 16:18:14 +10:00
|
|
|
|
|
2026-05-07 12:27:57 +10:00
|
|
|
|
///// <summary>
|
|
|
|
|
|
///// Добавить в кэш данные
|
|
|
|
|
|
///// </summary>
|
|
|
|
|
|
///// <typeparam name="T"></typeparam>
|
|
|
|
|
|
///// <param name="key"></param>
|
|
|
|
|
|
///// <param name="data"></param>
|
|
|
|
|
|
///// <param name="cacheDuration"></param>
|
|
|
|
|
|
//void SetCachedData<T>(string key, T data, TimeSpan cacheDuration);
|
2023-11-30 16:18:14 +10:00
|
|
|
|
|
2023-12-06 10:20:20 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Добавить в кэш данные асинхронно
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <typeparam name="T"></typeparam>
|
|
|
|
|
|
/// <param name="key"></param>
|
|
|
|
|
|
/// <param name="data"></param>
|
|
|
|
|
|
/// <param name="cacheDuration"></param>
|
|
|
|
|
|
/// <returns></returns>
|
2026-05-07 12:27:57 +10:00
|
|
|
|
Task SetCachedDataAsync<T>(string key, T data, TimeSpan cacheDuration, bool useCompression = false);
|
2023-12-06 10:20:20 +10:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Удалить кэшированные данные
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="key"></param>
|
|
|
|
|
|
void DeleteCachedData(string key);
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Удалить кэшированные данные асинхронно
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="key"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
Task DeleteCachedDataAsync(string key);
|
2026-01-15 15:01:56 +10:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Сгенерировать уникальный ключ
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="keyParts"></param>
|
2026-03-20 12:28:34 +10:00
|
|
|
|
/// <param name="keyPartsToHash"></param>
|
2026-01-15 15:01:56 +10:00
|
|
|
|
/// <returns></returns>
|
2026-03-20 12:28:34 +10:00
|
|
|
|
string GetKey(string[] keyParts, string[]? keyPartsToHash = null);
|
2026-03-23 13:58:31 +10:00
|
|
|
|
|
2026-03-17 13:50:06 +10:00
|
|
|
|
|
2026-05-05 14:52:17 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Удалить ключи по маске (template*)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="pattern"></param>
|
|
|
|
|
|
/// <param name="batchSize"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
Task<int> DeleteKeysByPatternAsync(string pattern, int batchSize = 100);
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-03-17 13:50:06 +10:00
|
|
|
|
#region Работа с Hash
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Изменить одно поле в Hash
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <typeparam name="T"></typeparam>
|
|
|
|
|
|
/// <param name="hashKey"></param>
|
|
|
|
|
|
/// <param name="field"></param>
|
|
|
|
|
|
/// <param name="value"></param>
|
|
|
|
|
|
/// <param name="ttl">Если указано, обновится у всего Hash. Если не указано и hash не существовал, создастся Hash с бесокнечным ttl</param>
|
2026-05-29 17:09:36 +10:00
|
|
|
|
/// <param name="useCompression">Сжимать данные</param>
|
2026-03-17 13:50:06 +10:00
|
|
|
|
/// <returns></returns>
|
2026-05-29 17:09:36 +10:00
|
|
|
|
Task SetHashFieldAsync<T>(string hashKey, string field, T value, TimeSpan? ttl = null, bool useCompression = false);
|
2026-06-03 12:09:47 +10:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Изменить несколько полей в Hash
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <typeparam name="T"></typeparam>
|
|
|
|
|
|
/// <param name="items"></param>
|
|
|
|
|
|
/// <param name="ttl">Если указано, обновится у всего Hash. Если не указано и hash не существовал, создастся Hash с бесокнечным ttl</param>
|
|
|
|
|
|
/// <param name="useCompression">Сжимать данные</param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
Task SetHashFieldsAsync<T>(List<(string HashKey, string FieldKey, T Value)> items, TimeSpan? ttl = null, bool useCompression = false);
|
2026-03-17 13:50:06 +10:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Получить значение поля из Hash
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <typeparam name="T"></typeparam>
|
|
|
|
|
|
/// <param name="hashKey"></param>
|
|
|
|
|
|
/// <param name="field"></param>
|
|
|
|
|
|
/// <returns></returns>
|
2026-05-29 17:09:36 +10:00
|
|
|
|
Task<T?> GetHashFieldAsync<T>(string hashKey, string field, bool useCompression = false);
|
2026-03-17 13:50:06 +10:00
|
|
|
|
|
2026-05-18 16:46:42 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Получить случайную первую запись из Hash
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <typeparam name="T"></typeparam>
|
|
|
|
|
|
/// <param name="hashKey"></param>
|
|
|
|
|
|
/// <returns></returns>
|
2026-05-29 17:09:36 +10:00
|
|
|
|
Task<(string Field, T? Value)?> GetFirstHashFieldAsync<T>(string hashKey, bool useCompression = false);
|
2026-05-18 16:46:42 +10:00
|
|
|
|
|
2026-03-17 13:50:06 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Получить все значения из Hash
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <typeparam name="T"></typeparam>
|
|
|
|
|
|
/// <param name="hashKey"></param>
|
|
|
|
|
|
/// <returns></returns>
|
2026-05-29 17:09:36 +10:00
|
|
|
|
Task<Dictionary<string, T>> GetAllHashFieldsAsync<T>(string hashKey, bool useCompression = false);
|
2026-03-17 13:50:06 +10:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Удалить одну запись из Hash
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="hashKey"></param>
|
|
|
|
|
|
/// <param name="field"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
Task DeleteHashFieldAsync(string hashKey, string field);
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Есть ли запись в Hash
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="hashKey"></param>
|
|
|
|
|
|
/// <param name="field"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
Task<bool> HashFieldExistsAsync(string hashKey, string field);
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Удалить весь Hash
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="hashKey"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
Task DeleteHashAsync(string hashKey);
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Получить количество записей в Hash
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="hashKey"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
Task<long> GetHashLengthAsync(string hashKey);
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Установить TTL для Hash
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="hashKey"></param>
|
|
|
|
|
|
/// <param name="ttl"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
Task SetHashTtlAsync(string hashKey, TimeSpan ttl);
|
|
|
|
|
|
|
2026-05-29 17:09:36 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Получить значения нескольких полей из Hash
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <typeparam name="T"></typeparam>
|
|
|
|
|
|
/// <param name="keys"></param>
|
|
|
|
|
|
/// <param name="useCompression"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
Task<List<T>> GetHashFieldsAsync<T>(List<(string HashKey, string FieldKey)> keys, bool useCompression = false);
|
|
|
|
|
|
|
2026-06-01 16:10:00 +10:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Удалить список из Hash
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="keys"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
Task DeleteHashFieldsAsync(List<(string HashKey, string FieldKey)> keys);
|
|
|
|
|
|
|
2026-03-17 13:50:06 +10:00
|
|
|
|
#endregion
|
2023-11-30 16:18:14 +10:00
|
|
|
|
}
|
|
|
|
|
|
}
|