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


规则经过测试,我们的分布式缓存与多级缓存是可以正常使用的,但查看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};});
  1. 注册分布式Redis缓存
builder.Services.AddDistributedCache(distributedCacheOptions =>{distributedCacheOptions.UseStackExchangeRedisCache();});方案四. 通过指定Configuration注册
  1. 在Redis缓存的配置存储到本地appsettings.json文件
{"RedisConfig":{"Servers":[{"Host": "localhost","Port": 6379}],"DefaultDatabase": 3,"ConnectionPoolSize": 10}}
  1. 指定Configuration注册分布式Redis缓存
var builder = WebApplication.CreateBuilder(args);//注册分布式缓存builder.Services.AddDistributedCache(distributedCacheOptions =>{// 使用存储Redis配置的ConfigurationdistributedCacheOptions.UseStackExchangeRedisCache(builder.Configuration.GetSection("RedisConfig"));});方案五. 将配置存储到Dcc上,并通过Configuration提供的手动映射功能,实现选项模式
  1. 使用Dcc,并手动指定映射
builder.AddMasaConfiguration(configurationBuilder =>{configurationBuilder.UseDcc();//使用Dcc 扩展Configuration能力,支持远程配置configurationBuilder.UseMasaOptions(options =>{//通过手动映射RedisConfigurationOptions的配置,实现选项模式options.MappingConfigurationApi<RedisConfigurationOptions>("{替换为Dcc中配置所属的AppId}", "{替换为Redis配置的对象名称}");});});
  1. 注册分布式Redis缓存
builder.Services.AddDistributedCache(distributedCacheOptions =>{distributedCacheOptions.UseStackExchangeRedisCache();});
方案三、四、五的本质都是通过支持选项模式来注册分布式Redis缓存

推荐阅读