看看 Asp.net core Webapi 项目如何优雅地使用分布式缓存

前言

缓存是提升程序性能必不可少的方法,Asp.net core 支持多级缓存配置,主要有客户端缓存、服务器端缓存,内存缓存和分布式缓存等。其中客户端缓和服务器端缓存在使用上都有比较大的限制,而内存缓和分布式缓存则比较灵活。

分布式缓存是一种用于存储和管理数据的技术,它将数据存储在多个节点上,以实现高可用性、伸缩性和性能优化。

分布式缓存通常用于大规模的应用程序中,可以有效地减轻数据库负载,加速数据访问,提高系统的可靠性和性能。

分布式缓存的特点包括:

  1. 高可用性:分布式缓存采用多节点部署,数据被复制到多个节点上,即使某个节点发生故障,仍然可以从其他节点获取数据,保证系统的高可用性。

  2. 性能优化:分布式缓存将热门数据存储在内存中,加快数据的访问速度,减少对数据库的频繁访问,从而提高系统的性能。

  3. 数据一致性:分布式缓存通过复制、分片和一致性哈希等技术,确保多个节点上的数据保持一致。

  4. 伸缩性:分布式缓存可以根据负载情况动态扩展,以应对不断增长的数据量和访问量,新的节点可以很容易地加入到缓存集群中,以提供更大的存储容量和更高的性能。

常见的分布式缓存系统包括 Redis、Memcached、Ehcache 等,可以方便地在应用程序中集成和使用。

本篇主要讲解在 asp.net core net6.0 webapi 项目中如何利用 Redis 来实现分布式缓存。

使用步骤

  1. 下载和安装 Redis

  2. 打开 Program.cs 文件

  3. 在语句 var app = builder.Build(); 之前注册内存缓存服务

    c# 复制代码
    var builder = WebApplication.CreateBuilder(args);
    ......
    //注册分布式缓存服务
    builder.Services.AddStackExchangeRedisCache(options => {
        // 配置 Redis 连接串
        options.Configuration = "127.0.0.1:16379,allowadmin=true";
    
        // 配置缓存Key前缀,避免和其它程序冲突,因为Redis可能其它程序也在使用
        options.InstanceName = "test_";
    });
    ......
    var app = builder.Build();
  4. 打开控制器文件,如 Test1Controller.cs

  5. 引入分布式缓存命名空间

    c# 复制代码
    using Microsoft.Extensions.Caching.Distributed;
  6. 在构造方法注入内存缓存服务,如:

    c# 复制代码
    private readonly IDistributedCache distCache;
    
      public Test1Controller(IDistributedCache distCache)
      {
          this.distCache = distCache;
      }
  7. 通过分布式缓存的GetString和SetString方法缓存数据,如:

    c# 复制代码
    [HttpGet]
    public string Now()
    {
        var cacheKey = "Now";
        string? s = distCache.GetString(cacheKey);
        if (s == null)
        {
            s = DateTime.Now.ToString();
            var opt = new DistributedCacheEntryOptions();
            opt.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(10);    //设置绝对过期时间
            distCache.SetString(cacheKey, s, opt);
        }
        return s;
    }

小技巧

  • 代码中,分布式缓存只支持 String 和 byte[],如果非 String 可以用 Json 把它反序列化为 String 再保存