- 修改
appsettings.json
, 将CacheKeyType的值改为 3
{"RedisConfig":{"Servers":[{"Host":"localhost","Port":6379}],"DefaultDatabase":3,"ConnectionPoolSize":10,"GlobalCacheOptions": {"CacheKeyType": 3 //CacheKeyType为3时启用别名格式化缓存Key,可节省缓存Key的键长度}}}
- 注册分布式缓存并配置类型名与别名的对应关系
builder.Services.AddDistributedCache(distributedCacheOptions =>{distributedCacheOptions.UseStackExchangeRedisCache();}, typeAliasOptions =>{typeAliasOptions.GetAllTypeAliasFunc = () => new Dictionary<string, string>(){{ "String", "s" }//当类型为String时 , 格式化后的Key为 s:key};});
通过指定类型与别名的对应关系,从而使得最终形成较短的缓存Key,以达到节省存储空间的目的,缓存Key生成规则可查看多级缓存示例多级缓存注册方案一. 通过本地配置文件注册
- 修改
appsettings.json
文件 , 分别配置多级缓存配置以及Redis缓存配置
{// 多级缓存全局配置 , 非必填"MultilevelCache": {"SubscribeKeyPrefix": "masa",//默认订阅方key前缀,用于拼接channel"SubscribeKeyType": 3, //默认订阅方key的类型,默认ValueTypeFullNameAndKey,用于拼接channel"CacheEntryOptions": {"AbsoluteExpirationRelativeToNow": "00:00:30",//绝对过期时长(距当前时间)"SlidingExpiration": "00:00:50"//滑动过期时长(距当前时间)}},// Redis分布式缓存配置"RedisConfig": {"Servers": [{"Host": "localhost","Port": 6379}],"DefaultDatabase": 3}}
- 添加多级缓存并使用分布式Redis缓存
builder.Services.AddMultilevelCache(distributedCacheOptions =>{distributedCacheOptions.UseStackExchangeRedisCache();});
方案二. 通过手动指定配置builder.Services.AddMultilevelCache(distributedCacheOptions =>{distributedCacheOptions.UseStackExchangeRedisCache(RedisConfigurationOptions);});
未配置内存缓存时 , 默认内存缓存永久有效除了上述两种方式以外,多级缓存的内存缓存配置也同样支持选项模式,我们可以通过Dcc或者利用
builder.Services.Configure<MultilevelCacheOptions>(builder.Configuration)
来支持选项模式修改缓存Key映射规则源码解读IDistributedCacheClient (分布式缓存客户端)
IDistributedCacheClient
接口提供以下方法来处理分布式缓存以下方法会根据全局缓存Key的规则配置以及传入缓存Key的规则配置,检测是否需要格式化缓存Key,对需要格式化Key的操作按照缓存Key格式化规则进行处理,详细查看:
Get<T>
、GetAsync<T>
: 根据缓存Key返回类型为T
的结果 (如果缓存不存在,则返回Null)GetList<T>
、GetListAsync<T>
: 根据缓存Key集合返回对应的缓存值的集合 (针对不存在的缓存key,其值返回Null)GetOrSet<T>
、GetOrSetAsync<T>
: 如果在缓存中找到,则返回类型为T
的结果,如果缓存未找到,则执行Setter
,并返回Setter
的结果Set<T>
、SetAsync<T>
: 将指定的缓存Key以及缓存值添加到缓存SetList<T>
、SetListAsync<T>
: 将指定的缓存Key、Value集合添加缓存Remove<T>
、RemoveAsync<T>
: 将指定的缓存Key (缓存Key集合) 从缓存中移除Refresh<T>
、RefreshAsync<T>
: 刷新指定的缓存Key (缓存Key集合) 的生命周期- 适用于未被删除、绝对过期时间没有到,但相对过期时间快到的缓存 (延长滑动过期时间)
Exists<T>
、ExistsAsync<T>
: 如果在缓存中找到 , 则返回true , 否则返回falseGetKeys<T>
、GetKeysAsync<T>
: 根据key pattern 得到符合规则的所有缓存KeyGetByKeyPattern<T>
、GetByKeyPatternAsync<T>
: 根据key pattern 得到符合规则的所有缓存Key、Value集合HashIncrementAsync
: 将指定的缓存Key的值增加Value,并返回增长后的结果HashDecrementAsync
: 将指定的缓存Key的值减少Value,并返回减少后的结果- 支持设置最小的Value , 避免减少后的值低于设置的最小值,执行失败则返回: -1
KeyExpire<T>
、KeyExpireAsync<T>
: 设置缓存Key的生命周期
推荐阅读
- MasaFramework -- 缓存入门与规则配置
- 【番外篇】Rust环境搭建+基础开发入门+Rust与.NET6、C++的基础运算性能比较
- disco diffusionAI绘画保姆级入门教程
- 一 JPA入门学习集合springboot
- 原神室内派考古入门任务怎么做
- 七 SpringBoot - Redis 缓存
- Flink WordCount入门
- 一篇文章带你了解网页框架——Vue简单入门
- 绝地求生新手如何快速入门(绝地求生新手入门教学怎么跳过)
- 【C++】spdlog光速入门,C++logger最简单最快的库