Не уверен, что FlushDatabase()
или FlushAllDatabase()
- это именно то, что вам нужно:
- FLUSHDB - удаляет все ключи из текущей базы данных соединения.
- FLUSHALL - удаляет все ключииз всех баз данных.
Существует другой обходной путь, использующий методы расширения и Newtonsoft.Json
в качестве сериализатора / десериализатора. Я понимаю, что IDistributedCache
поддерживает только строковый / байтовый массив в качестве входных данных, и вы не можете передать ему объекты класса, и этот обходной путь поможет вам сделать это.
Startup.cs
services.AddStackExchangeRedisCache(options =>
{
options.Configuration = "localhost";
options.InstanceName = "name";
});
CacheExtensions.cs
namespace TestProject.Extensions
{
public static class CacheExtensions
{
public static async Task<T> SetAsync<T>(this IDistributedCache cache, string key, T item)
{
var json = JsonConvert.SerializeObject(item);
await cache.SetStringAsync(key, json);
return await cache.GetAsync<T>(key);
}
public static async Task<T> SetAsync<T>(this IDistributedCache cache, string key, T item, int expirationInHours)
{
var json = JsonConvert.SerializeObject(item);
await cache.SetStringAsync(key, json, new DistributedCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(expirationInHours)
});
return await cache.GetAsync<T>(key);
}
public static async Task<T> GetAsync<T>(this IDistributedCache cache, string key)
{
var json = await cache.GetStringAsync(key);
if (json == null)
return default;
return JsonConvert.DeserializeObject<T>(json);
}
}
}
DI IDistributedCache
:
private readonly IDistributedCache _cache;
public TestService(IDistributedCache cache)
{
_cache = cache;
}
и используйте его так:
List<Test> testList = new List<Test>
{
new Test(...),
new Test(...)
};
var test = await _cache.GetAsync<List<Test>>("ListKey");
await _cache.SetAsync("ListKey", testList);
await _cache.RemoveAsync("ListKey");
var test2 = await _cache.GetAsync<Test>("key");
await _cache.SetAsync("key", new Test(...));
await _cache.RemoveAsync("key");
Надеюсь, это поможет.