前言
缓存是提升程序性能必不可少的方法,Asp.net core 支持多级缓存配置,主要有客户端缓存、服务器端缓存,内存缓存和分布式缓存等。其中客户端缓和服务器端缓存在使用上都有比较大的限制,而内存缓和分布式缓存则比较灵活。
分布式缓存是一种用于存储和管理数据的技术,它将数据存储在多个节点上,以实现高可用性、伸缩性和性能优化。
分布式缓存通常用于大规模的应用程序中,可以有效地减轻数据库负载,加速数据访问,提高系统的可靠性和性能。
分布式缓存的特点包括:
-
高可用性:分布式缓存采用多节点部署,数据被复制到多个节点上,即使某个节点发生故障,仍然可以从其他节点获取数据,保证系统的高可用性。
-
性能优化:分布式缓存将热门数据存储在内存中,加快数据的访问速度,减少对数据库的频繁访问,从而提高系统的性能。
-
数据一致性:分布式缓存通过复制、分片和一致性哈希等技术,确保多个节点上的数据保持一致。
-
伸缩性:分布式缓存可以根据负载情况动态扩展,以应对不断增长的数据量和访问量,新的节点可以很容易地加入到缓存集群中,以提供更大的存储容量和更高的性能。
常见的分布式缓存系统包括 Redis、Memcached、Ehcache 等,可以方便地在应用程序中集成和使用。
本篇主要讲解在 asp.net core net6.0 webapi 项目中如何利用 Redis 来实现分布式缓存。
使用步骤
-
下载和安装 Redis
- https://redis.io/download/
-
打开 Program.cs 文件
-
在语句
var app = builder.Build();
之前注册内存缓存服务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();
-
打开控制器文件,如 Test1Controller.cs
-
引入分布式缓存命名空间
using Microsoft.Extensions.Caching.Distributed;
-
在构造方法注入内存缓存服务,如:
private readonly IDistributedCache distCache; public Test1Controller(IDistributedCache distCache) { this.distCache = distCache; }
-
通过分布式缓存的GetString和SetString方法缓存数据,如:
[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 再保存