前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【BlogBook书】4、Cache:缓存

【BlogBook书】4、Cache:缓存

作者头像
老张的哲学
发布2024-01-15 17:37:58
1820
发布2024-01-15 17:37:58
举报
文章被收录于专栏:NetCore 从壹开始NetCore 从壹开始

框架已经将缓存集成到了官方的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());
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NetCore 从壹开始 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档