规则经过测试,我们的分布式缓存与多级缓存是可以正常使用的,但查看Redis的存储结果后,发现它们实际的存储与我们心目中的结果好像是有点出入,它们分别是:
- 缓存Key不同 (与我们设置的Key不完全一致)
- 结构不同 (实际存储的为Hash类型)
- 内容不同 (内容经过压缩)
文章插图
缓存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数据存储用户设置的缓存数据内容压缩规则- 当存储值类型为以下类型时,不对数据进行压缩:
- Byte
- SByte
- UInt16
- UInt32
- UInt64
- Int16
- Int32
- Int64
- Double
- Single
- Decimal
- 当存储值类型为字符串时,对数据进行压缩
- 当存储值类型不满足以上条件时,对数据进行序列化并进行压缩
- 修改
appsettings.json
文件
{"RedisConfig":{"Servers":[{"Host":"localhost","Port":6379}],"DefaultDatabase":3,"ConnectionPoolSize":10}}
- 注册分布式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格式化处理};});});
方案三. 通过选项模式注册- 通过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};});
- 注册分布式Redis缓存
builder.Services.AddDistributedCache(distributedCacheOptions =>{distributedCacheOptions.UseStackExchangeRedisCache();});
方案四. 通过指定Configuration
注册- 在Redis缓存的配置存储到本地
appsettings.json
文件
{"RedisConfig":{"Servers":[{"Host": "localhost","Port": 6379}],"DefaultDatabase": 3,"ConnectionPoolSize": 10}}
- 指定
Configuration
注册分布式Redis缓存
var builder = WebApplication.CreateBuilder(args);//注册分布式缓存builder.Services.AddDistributedCache(distributedCacheOptions =>{// 使用存储Redis配置的ConfigurationdistributedCacheOptions.UseStackExchangeRedisCache(builder.Configuration.GetSection("RedisConfig"));});
方案五. 将配置存储到Dcc上,并通过Configuration提供的手动映射功能,实现选项模式- 使用Dcc,并手动指定映射
builder.AddMasaConfiguration(configurationBuilder =>{configurationBuilder.UseDcc();//使用Dcc 扩展Configuration能力,支持远程配置configurationBuilder.UseMasaOptions(options =>{//通过手动映射RedisConfigurationOptions的配置,实现选项模式options.MappingConfigurationApi<RedisConfigurationOptions>("{替换为Dcc中配置所属的AppId}", "{替换为Redis配置的对象名称}");});});
- 注册分布式Redis缓存
builder.Services.AddDistributedCache(distributedCacheOptions =>{distributedCacheOptions.UseStackExchangeRedisCache();});
方案三、四、五的本质都是通过支持选项模式来注册分布式Redis缓存推荐阅读
- 【番外篇】Rust环境搭建+基础开发入门+Rust与.NET6、C++的基础运算性能比较
- disco diffusionAI绘画保姆级入门教程
- 一 JPA入门学习集合springboot
- 原神室内派考古入门任务怎么做
- 七 SpringBoot - Redis 缓存
- Flink WordCount入门
- 一篇文章带你了解网页框架——Vue简单入门
- 绝地求生新手如何快速入门(绝地求生新手入门教学怎么跳过)
- 【C++】spdlog光速入门,C++logger最简单最快的库
- 小白转行入门STM32----手机蓝牙控制STM32单片机点亮LED