框架已经将缓存集成到了官方的IDistributedCache分布式缓存接口,可以直接使用内存缓存和分布式缓存。
默认使用内存缓存,开启Redis开关以后,使用分布式缓存。
一、相关的依赖注入配置
代码语言:javascript复制builder.Services.AddCacheSetup();
相关参数设置
代码语言:javascript复制"Redis": {
"Enable": false,//是否开启redis缓存
"ConnectionString": "127.0.0.1:6379",//可以配置密码
"InstanceName": "" //前缀
},
两种缓存机制统一封装,并二次封装到了ICache接口。
代码语言:javascript复制/// <summary>
/// 统一注册缓存
/// </summary>
/// <param name="services"></param>
public static void AddCacheSetup(this IServiceCollection services)
{
var cacheOptions = App.GetOptions<RedisOptions>();
if (cacheOptions.Enable)
{
// 配置启动Redis服务,虽然可能影响项目启动速度,但是不能在运行的时候报错,所以是合理的
services.AddSingleton<IConnectionMultiplexer>(sp =>
{
//获取连接字符串
var configuration = ConfigurationOptions.Parse(cacheOptions.ConnectionString, true);
configuration.ResolveDns = true;
return ConnectionMultiplexer.Connect(configuration);
});
services.AddSingleton<ConnectionMultiplexer>(p => p.GetService<IConnectionMultiplexer>() as ConnectionMultiplexer);
//使用Redis
services.AddStackExchangeRedisCache(options =>
{
options.ConnectionMultiplexerFactory = () => Task.FromResult(App.GetService<IConnectionMultiplexer>(false));
if (!cacheOptions.InstanceName.IsNullOrEmpty()) options.InstanceName = cacheOptions.InstanceName;
});
services.AddTransient<IRedisBasketRepository, RedisBasketRepository>();
}
else
{
//使用内存
services.AddMemoryCache();
services.AddDistributedMemoryCache();
}
services.AddSingleton<ICaching, Caching>();
}
二、使用方式
1、通过ICache的二次封装,直接注入ICache即可。
代码语言:javascript复制private readonly ICaching _caching;
public CacheManageController(ICaching caching)
{
_caching = caching;
}
/// <summary>
/// 获取全部缓存
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<MessageModel<List<string>>> Get()
{
return Success(await _caching.GetAllCacheKeysAsync());
}