feat: add sliding expiration for cache

This commit is contained in:
Polianin Nikita 2024-05-29 05:30:00 +03:00
parent d3a60d2a30
commit f55d701ff3
2 changed files with 8 additions and 4 deletions

View File

@ -6,7 +6,11 @@ namespace Mirea.Api.Security.Common.Interfaces;
public interface ICacheService public interface ICacheService
{ {
Task SetAsync<T>(string key, T value, TimeSpan? absoluteExpirationRelativeToNow = null, CancellationToken cancellationToken = default); Task SetAsync<T>(string key, T value,
TimeSpan? absoluteExpirationRelativeToNow = null,
TimeSpan? slidingExpiration = null,
CancellationToken cancellationToken = default);
Task<T?> GetAsync<T>(string key, CancellationToken cancellationToken = default); Task<T?> GetAsync<T>(string key, CancellationToken cancellationToken = default);
Task RemoveAsync(string key, CancellationToken cancellationToken = default); Task RemoveAsync(string key, CancellationToken cancellationToken = default);
} }

View File

@ -14,7 +14,7 @@ public class PreAuthService(ICacheService cache)
{ {
public TimeSpan Lifetime { private get; init; } public TimeSpan Lifetime { private get; init; }
private static string GeneratePreAuthToken() => Guid.NewGuid().ToString().Replace("-", "") + private static string GeneratePreAuthToken() => Guid.NewGuid().ToString().Replace("-", "") +
GeneratorKey.GenerateString(16); GeneratorKey.GenerateString(16);
private static string GetPreAuthCacheKey(string fingerprint) => $"{fingerprint}_pre_auth_token"; private static string GetPreAuthCacheKey(string fingerprint) => $"{fingerprint}_pre_auth_token";
@ -35,8 +35,8 @@ public class PreAuthService(ICacheService cache)
await cache.SetAsync( await cache.SetAsync(
GetPreAuthCacheKey(request.Fingerprint), GetPreAuthCacheKey(request.Fingerprint),
JsonSerializer.SerializeToUtf8Bytes(preAuthTokenStruct), JsonSerializer.SerializeToUtf8Bytes(preAuthTokenStruct),
Lifetime, absoluteExpirationRelativeToNow: Lifetime,
cancellation); cancellationToken: cancellation);
return new PreAuthTokenResponse return new PreAuthTokenResponse
{ {