【BlogBook书】4、Cache:缓存

科技   科技   2024-01-13 18:01   北京  


2024
B
C
V
P
B
O
O
K


BCVP.BOOK 是BlogCore的快速操作手册指南,列举了BlogCore常见的23个基本知识点,没有冗余的讲解,通过直接地、快速地对每个知识点做分步说明,方便初学者快速使用,或者老手查漏补缺


可以结合ASP.NET8.0视频,快速掌握所有知识点:

https://www.bilibili.com/video/BV13g4y1Z7in


框架已经将缓存集成到了官方的IDistributedCache分布式缓存接口,可以直接使用内存缓存和分布式缓存。

默认使用内存缓存,开启Redis开关以后,使用分布式缓存。


一、相关的依赖注入配置

builder.Services.AddCacheSetup();

相关参数设置

"Redis": {    "Enable": false,//是否开启redis缓存    "ConnectionString": "127.0.0.1:6379",//可以配置密码    "InstanceName": "" //前缀  },

两种缓存机制统一封装,并二次封装到了ICache接口。

/// <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即可。

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());}


BCVP代码创新社
专注于 NetCore 相关技术栈的推广,致力于前后端之间的完全分离,从壹开始,让每一个程序员都能从这里学有所成。
 最新文章