MasaFramework -- 缓存入门与规则配置( 二 )

  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缓存,找到刚刚你配置的缓存,确定下它的存储结果是否与你想象的一致!!
规则经过测试,我们的分布式缓存与多级缓存是可以正常使用的,但查看Redis的存储结果后,发现它们实际的存储与我们心目中的结果好像是有点出入,它们分别是:
  1. 缓存Key不同 (与我们设置的Key不完全一致)
  2. 结构不同 (实际存储的为Hash类型)
  3. 内容不同 (内容经过压缩)

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

文章插图
缓存Key的生成规则缓存Key支持三种规则:
枚举值描述None1不做处理,传入的Key即为实际的缓存KeyTypeName2实际的缓存Key = $"{GetTypeName(T)}.{传入缓存Key}" (默认)TypeAlias3根据TypeName得到对应的别名与Key的组合,Format: ${TypeAliasName}{:}{key}
详细规则可查看
存储结构与规则Masa.Contrib.Caching.Distributed.StackExchangeRedis使用的是Hash存储,通过使用Hash存储,支持缓存的绝对过期以及相对过期,其中:
键描述详细特殊absexp绝对过期时间的Ticks自公历 0001-01-01 00:00:00:000 到绝对过期时间的计时周期数 (1周期 = 100ns 即 1/10000 ms)-1 为永不过期sldexp滑动过期时间的Ticks自公历 0001-01-01 00:00:00:000 到滑动过期时间的计时周期数 (1周期 = 100ns 即 1/10000 ms,每次获取数据时会刷新滑动过期时间)-1 为永不过期data数据存储用户设置的缓存数据内容压缩规则
  1. 当存储值类型为以下类型时,不对数据进行压缩:
  • Byte
  • SByte
  • UInt16
  • UInt32
  • UInt64
  • Int16
  • Int32
  • Int64
  • Double
  • Single
  • Decimal
  1. 当存储值类型为字符串时,对数据进行压缩
  2. 当存储值类型不满足以上条件时,对数据进行序列化并进行压缩
分布式Redis缓存示例分布式缓存注册方案一. 通过本地配置文件注册
  1. 修改appsettings.json文件
{"RedisConfig":{"Servers":[{"Host":"localhost","Port":6379}],"DefaultDatabase":3,"ConnectionPoolSize":10}}
  1. 注册分布式Redis缓存
builder.Services.AddDistributedCache(distributedCacheOptions =>{distributedCacheOptions.UseStackExchangeRedisCache();});方案二. 手动指定Redis配置注册
builder.Services.AddDistributedCache(distributedCacheOptions =>{distributedCacheOptions.UseStackExchangeRedisCache(options =>{options.Servers = new List<RedisServerOptions>(){new("localhost", 6379)};options.DefaultDatabase = 3;options.ConnectionPoolSize = 10;options.GlobalCacheOptions = new CacheOptions(){CacheKeyType = CacheKeyType.None //全局禁用缓存Key格式化处理};});});方案三. 通过选项模式注册
  1. 通过Configure方法使其支持选项模式
builder.Services.Configure<RedisConfigurationOptions>(redisConfigurationOptions =>{redisConfigurationOptions.Servers = new List<RedisServerOptions>(){new("localhost", 6379)};redisConfigurationOptions.DefaultDatabase = 3;redisConfigurationOptions.ConnectionPoolSize = 10;redisConfigurationOptions.GlobalCacheOptions = new CacheOptions(){CacheKeyType = CacheKeyType.None};});

经验总结扩展阅读