MasaFramework -- 缓存入门与规则配置

概念什么是缓存,在项目中,为了提高数据的读取速度 , 我们会对不经常变更但访问频繁的数据做缓存处理,我们常用的缓存有:

  • 本地缓存
    • 内存缓存:IMemoryCache
  • 分布式缓存
    • Redis: StackExchange.Redis
功能目前,MasaFramework为我们提供了以下能力
  • IDistributedCacheClient: 分布式缓存
    • Masa.Contrib.Caching.Distributed.StackExchangeRedis: 基于StackExchange.Redis实现的分布式缓存
  • IMultilevelCacheClient: 多级缓存
    • Masa.Contrib.Caching.MultilevelCache: 基于内存缓存以及分布式缓存实现的多级缓存 , 支持监控缓存变更,分布式缓存更新后相应的内存缓存也会同步更新,避免命中过时的内存缓存导致获取错误的数据 , 同时也尽可能的将多个副本的内存缓存保持同步
入门
  • 前提条件:安装.NET 6.0
分布式缓存
  1. 新建ASP.NET Core 空项目Assignment.DistributedCache,并安装Masa.Contrib.Caching.Distributed.StackExchangeRedis
dotnet new web -o Assignment.DistributedCachecd Assignment.DistributedCachedotnet add package Masa.Contrib.Caching.Distributed.StackExchangeRedis --version 0.6.0-rc.5
  1. 配置Redis配置信息
{"RedisConfig":{"Servers":[{"Host":"localhost","Port":6379}],"DefaultDatabase":3,"ConnectionPoolSize":10}}
  1. 注册分布式缓存,并使用Redis缓存,修改Program.cs
var builder = WebApplication.CreateBuilder(args);//注册分布式缓存builder.Services.AddDistributedCache(distributedCacheOptions =>{distributedCacheOptions.UseStackExchangeRedisCache();//使用分布式Redis缓存, 默认使用本地`RedisConfig`下的配置});
使用分布式缓存的数据来源默认为 IOptionsMonitor<RedisConfigurationOptions>,如果本地未正确在RedisConfig节点配置缓存信息,且项目中也没有通过其它方式配置使其支持选项模式,则默认使用的Redis配置为: 地址: localhost、端口:6379 , 密码:空,数据库:db0
  1. 新建User类 , 用于接收用户信息
public class User{public string Name { get; set; }public int Age { get; set; }}
  1. 如何使用IDistributedCacheClient , 修改Program.cs
// 设置缓存app.MapPost("/set/{id}", async (IDistributedCacheClient distributedCacheClient, [FromRoute] string id, [FromBody] User user) =>{await distributedCacheClient.SetAsync(id, user);return Results.Accepted();});// 获取缓存app.MapGet("/get/{id}", async (IDistributedCacheClient distributedCacheClient, [FromRoute] string id) =>{var value = https://www.huyubaike.com/biancheng/await distributedCacheClient.GetAsync(id);return Results.Ok(value);});多级缓存
  1. 新建ASP.NET Core 空项目Assignment.DistributedCache,并安装Masa.Contrib.Caching.MultilevelCacheMasa.Contrib.Caching.Distributed.StackExchangeRedis
dotnet new web -o Assignment.MultilevelCachecd Assignment.MultilevelCachedotnet add package Masa.Contrib.Caching.MultilevelCache --version 0.6.0-rc.5dotnet add package Masa.Contrib.Caching.Distributed.StackExchangeRedis --version 0.6.0-rc.5
  1. 注册多级缓存,并使用分布式Redis缓存,修改Program.cs
var builder = WebApplication.CreateBuilder(args);//注册多级缓存builder.Services.AddMultilevelCache(distributedCacheOptions =>{distributedCacheOptions.UseStackExchangeRedisCache();//使用分布式Redis缓存});
  1. 新建User类,用于接收用户信息
public class User{public string Name { get; set; }public int Age { get; set; }}
  1. 如何使用IMultilevelCacheClient,修改Program.cs
// 设置缓存app.MapPost("/set/{id}", async (IMultilevelCacheClient multilevelCacheClient, [FromRoute] string id, [FromBody] User user) =>{await multilevelCacheClient.SetAsync(id, user);return Results.Accepted();});// 获取缓存app.MapGet("/get/{id}", async (IMultilevelCacheClient multilevelCacheClient, [FromRoute] string id) =>{var value = https://www.huyubaike.com/biancheng/await multilevelCacheClient.GetAsync(id);return Results.Ok(value);});测试借助Postman或者Swagger或者使用其它API测试工具,分别测试设置缓存与获取缓存,以验证分布式缓存以及多级缓存是可以正常使用的 。
友情提示:检查Redis缓存,找到刚刚你配置的缓存,确定下它的存储结果是否与你想象的一致!!

推荐阅读