- 如何使用
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的存储结果后,发现它们实际的存储与我们心目中的结果好像是有点出入,它们分别是:
- 缓存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};});
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 直播带货小白如何入门
- 【番外篇】Rust环境搭建+基础开发入门+Rust与.NET6、C++的基础运算性能比较
- disco diffusionAI绘画保姆级入门教程
- 一 JPA入门学习集合springboot
- 原神室内派考古入门任务怎么做
- 七 SpringBoot - Redis 缓存
- Flink WordCount入门
- 一篇文章带你了解网页框架——Vue简单入门
- 【C++】spdlog光速入门,C++logger最简单最快的库
- 小白转行入门STM32----手机蓝牙控制STM32单片机点亮LED