2024-10-31 17:48:11 +08:00
|
|
|
|
using LFlow.Cache.Interface;
|
|
|
|
|
|
using Microsoft.Extensions.Caching.Memory;
|
|
|
|
|
|
|
|
|
|
|
|
namespace LFlow.Cache.Cacher
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 自身的单实例缓存
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class SelfSingleCache : ISelfCache
|
|
|
|
|
|
{
|
|
|
|
|
|
protected MemoryCache _cache = new(new MemoryCacheOptions()
|
|
|
|
|
|
{
|
|
|
|
|
|
ExpirationScanFrequency = new TimeSpan(0, 0, 10)
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
public MemoryCache CacheProvider => _cache;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Task ClearAsync()
|
|
|
|
|
|
{
|
|
|
|
|
|
CacheProvider.Clear();
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public Task<T?> GetAsync<T>(string key)
|
|
|
|
|
|
{
|
|
|
|
|
|
return Task.FromResult(CacheProvider.Get<T>(key));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public Task<object?> GetAsync(string key)
|
|
|
|
|
|
{
|
|
|
|
|
|
return Task.FromResult(CacheProvider.Get(key));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public Task RemoveAsync(string key)
|
|
|
|
|
|
{
|
2024-11-01 16:46:18 +08:00
|
|
|
|
if (CacheProvider.TryGetValue(key, out _))
|
|
|
|
|
|
CacheProvider.Remove(key);
|
2024-10-31 17:48:11 +08:00
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public Task SetAsync<T>(string key, T data)
|
|
|
|
|
|
{
|
|
|
|
|
|
CacheProvider.Set(key, data);
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public Task SetAsync<T>(string key, T data, TimeSpan expiredTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
CacheProvider.Set(key, data, expiredTime);
|
|
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|