.NET 9 中的 多级缓存 HybridCache
HybridCache是什么
在 .NET 9 中,Microsoft 将 HybridCache 带入了框架体系。
HybridCache 是一种新的缓存模型,设计用于封装本地缓存和分布式缓存,使用者无需担心选择缓存类型,从而优化性能和维护效率。
实际上,HybridCache 基于 IDistributedCache 提供的接口和操作,但增加了一些其他的特性,如封装两类不同缓存库(本地和分布),支持标签删除(Tag-based Cache Eviction)和约束选项。
HybridCache 与 IDistributedCache 的区别
IDistributedCache:
- 仅支持分布式缓存,如 Redis、SQL Server、MemoryCache。
- 选择依赖于目标缓存和管理设备。
- 不支持标签删除,只能基于键值操作。
HybridCache:
- 支持封装本地和分布式缓存,在读取时优先读取本地缓存,如本地不存在,再读取分布式。
- 支持标签删除,通过指定标签管理缓存内容。
- 选项更加精简,支持自动化操作和选项约束。
HybridCache 的好处
- 性能优化: 本地缓存速度超过分布式,使用 HybridCache 可以减少读取分布缓存库时的延迟。
- 精简化工程: 使用者不需再自行核实选择哪个缓存,增加了工程效率。
- 标签管理: 缓存标签记录不同类型数据,便于分类管理和删除缓存。
- 安全性: 支持选项约束,使缓存操作更严格,防止错误使用和内容亏失。
代码示例
以下代码展示如何使用 HybridCache:
1. 添加缓存服务
var builder = WebApplication.CreateBuilder(args);
// 注册 HybridCache 服务
builder.Services.AddHybridCache();
// 注册 Redis 缓存服务,为 HybridCache 提供分布式缓存
builder.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = builder.Configuration.GetConnectionString("RedisConnectionString");
});
builder.Services.AddControllers();
2. 实现接口操作
读取缓存
[HttpGet("GetCache")]
public async Task<string[]> Get()
{
return await _cache.GetOrCreateAsync(
"a-1", async cancel => await Task.FromResult(Summaries)
);
}
删除缓存
[HttpGet("DeleteCache")]
public async Task<bool> Delete()
{
await _cache.RemoveAsync("a-1");
return true;
}
通过标签读取缓存
[HttpGet("GetCacheByTag")]
public async Task<string[]> GetCacheByTag()
{
var tags = new List<string> { "tag1", "tag2", "tag3" };
var entryOptions = new HybridCacheEntryOptions
{
Expiration = TimeSpan.FromMinutes(1),
LocalCacheExpiration = TimeSpan.FromMinutes(1)
};
return await _cache.GetOrCreateAsync(
"a-1", async cancel => await Task.FromResult(Summaries),
entryOptions, tags
);
}
通过标签删除缓存
[HttpGet("DeleteCacheByTag")]
public async Task<bool> DeleteCacheByTag()
{
var tags = new List<string> { "tag1" };
await _cache.RemoveByTagAsync(tags);
return true;
}
小结
.NET 9 的 HybridCache 提供了一种便捷且高效的缓存解决方案,将本地缓存和分布式缓存无缝结合,为开发者简化了缓存逻辑,同时提供了更多高级功能,如标签管理和选项约束。通过代码示例可以看出,HybridCache 的操作直观且易于实现,非常适合现代应用场景。
如果你正在使用 .NET 9,尝试将 HybridCache 应用于你的项目中,体验其高效与简洁!
.NET 9 中的 多级缓存 HybridCache的更多相关文章
- Masa Framework源码解读-02缓存模块(分布式缓存进阶之多级缓存)
序言 今天这篇文章来看看Masa Framework的缓存设计,上一篇文章中说到的MasaFactory的应用也会在这章节出现.文章中如有错误之处还请指点,咱们话不多说,直入主题. Masa Fr ...
- Java高并发--CPU多级缓存与Java内存模型
Java高并发--CPU多级缓存与Java内存模型 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 CPU多级缓存 为什么需要CPU缓存:CPU的频率太快,以至于主存跟 ...
- 001-CPU多级缓存架构
一.基本概念 大致关系: CPU Cache --> 前端总线 FSB (下图中的Bus) --> Memory 内存 CPU 为了更快的执行代码.于是当从内存中读取数据时,并不是只读自己 ...
- Redis 多级缓存架构和数据库与缓存双写不一致问题
采用三级缓存:nginx本地缓存+redis分布式缓存+tomcat堆缓存的多级缓存架构 时效性要求非常高的数据:库存 一般来说,显示的库存,都是时效性要求会相对高一些,因为随着商品的不断的交易,库存 ...
- Redis: 缓存过期、缓存雪崩、缓存穿透、缓存击穿(热点)、缓存并发(热点)、多级缓存、布隆过滤器
Redis: 缓存过期.缓存雪崩.缓存穿透.缓存击穿(热点).缓存并发(热点).多级缓存.布隆过滤器 2019年08月18日 16:34:24 hanchao5272 阅读数 1026更多 分类专栏: ...
- 并发与高并发(三)-CPU多级缓存の乱序执行优化
一.CPU多级缓存-乱序执行优化 处理器或编译器为提高运算速度而做出违背代码原有顺序的优化. 重排序遵循原则as-if-serial as-if-serial语义:不管怎么重排序(编译器和处理器为了提 ...
- 【开源项目系列】如何基于 Spring Cache 实现多级缓存(同时整合本地缓存 Ehcache 和分布式缓存 Redis)
一.缓存 当系统的并发量上来了,如果我们频繁地去访问数据库,那么会使数据库的压力不断增大,在高峰时甚至可以出现数据库崩溃的现象.所以一般我们会使用缓存来解决这个数据库并发访问问题,用户访问进来,会先从 ...
- 有赞透明多级缓存解决方案(TMC)设计思路
引子 TMC 是什么 TMC,即"透明多级缓存(Transparent Multilevel Cache)",是有赞 PaaS 团队给公司内应用提供的整体缓存解决方案. TMC 在 ...
- 「性能提升」扩展 Spring Cache 支持多级缓存
为什么多级缓存 缓存的引入是现在大部分系统所必须考虑的 redis 作为常用中间件,虽然我们一般业务系统(毕竟业务量有限)不会遇到如下图 在随着 data-size 的增大和数据结构的复杂的造成性能下 ...
- 【多线程与高并发原理篇:1_cpu多级缓存模型】
1. 背景 现代计算机技术中,cpu的计算速度远远高于主内存的读写速度.为了解决速度不匹配问题,充分利用cpu的性能,在cpu与主内存之间加入了多级缓存,也叫高速缓存,cpu读取数据直接从高速缓存中读 ...
随机推荐
- js递归遍历树形结构数据,获取所有数组id集合
function getAllIds(tree, result) { //遍历树 获取id数组 for (const i in tree) { result.push(tree[i].id); // ...
- 55.父页面通过ifaram嵌套子页面,如何固定子页面菜单
使用固定定位 :
- KubeSphere 社区双周报|2024.06.21-07.04
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- OpenELB 在 CVTE 的最佳实践
作者:大飞哥,视源电子股份运维工程师, KubeSphere 社区用户委员会广州站站长,KubeSphere Ambassador. 公司介绍 广州视源电子科技股份有限公司(以下简称视源股份)成立于 ...
- 负载均衡器 OpenELB ARP 欺骗技术解析
作者:大飞哥,视源电子运维工程师,KubeSphere 用户委员会广州站站长,KubeSphere Ambassador. K8S 对集群外暴露服务有三种方式:NodePort,Ingress 和 L ...
- NIO和传统IO
传统 IO 基于字节流或字符流(如 FileInputStream.BufferedReader 等)进行文件读写,以及使用 Socket 和 ServerSocket 进行网络传输. NIO 使用通 ...
- nginx从入门到实战
概述 异步非阻塞的高性能HTTP和反向代理服务器 nginx的运行架构 1.Master进程 启动检查nginx.conf是否正确 根据配置文件创建.监控worker进程的数量和状态 监听socket ...
- spring boot shardingsphere 使用hikari连接池配置
shardingsphere 使用hikari连接池配置: shardingsphere: datasource: names: ds ds: type: com.zaxxer.hikari.Hika ...
- 低功耗4G模组:Air780EP开发板RC522实例
本文讲解合宙Air780EP开发板RC522实例,文末[阅读原文]获取最新资料. 本文档适用于Air780EP开发板 关联文档和使用工具 LuatOS-Soc固件获取 https://gitee. ...
- ARC134C The Majority
ARC134C The Majority link:[ARC134C] The Majority 小清新数学题.(反正我做不出来) 简要题意 有\(K\)个箱子,编号为\(1\)到\(K\)的箱子.起 ...