38 lines
1.0 KiB
C#
38 lines
1.0 KiB
C#
using VendingMachine.Application.Services;
|
|
|
|
namespace VendingMachine.Tests;
|
|
|
|
/// <summary>
|
|
/// 内存版 Redis 存储,用于集成测试
|
|
/// </summary>
|
|
public class InMemoryRedisStore : IRedisStore
|
|
{
|
|
private readonly Dictionary<string, (string Value, DateTime? ExpiresAt)> _store = new();
|
|
|
|
public Task SetAsync(string key, string value, TimeSpan expiry)
|
|
{
|
|
_store[key] = (value, DateTime.UtcNow.Add(expiry));
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public Task<string?> GetAsync(string key)
|
|
{
|
|
if (_store.TryGetValue(key, out var entry))
|
|
{
|
|
// 检查是否过期
|
|
if (entry.ExpiresAt.HasValue && DateTime.UtcNow > entry.ExpiresAt.Value)
|
|
{
|
|
_store.Remove(key);
|
|
return Task.FromResult<string?>(null);
|
|
}
|
|
return Task.FromResult<string?>(entry.Value);
|
|
}
|
|
return Task.FromResult<string?>(null);
|
|
}
|
|
|
|
public Task<bool> DeleteAsync(string key)
|
|
{
|
|
return Task.FromResult(_store.Remove(key));
|
|
}
|
|
}
|