架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1275|回复: 5

[.NET Core] ASP.NET Core(十八)自定义简单的 OutputCache 输出缓存

[复制链接]
发表于 2023-5-7 21:42:06 | 显示全部楼层 |阅读模式
需求:在 .NET Framework 中有一个 OutputCacheAttribute 特性(该特性用于标记将缓存其输出的操作方法),把频繁访问并且不经常变化的数据存储到内存中直接输出响应内容,利用该特性可以提升网站的并发性能,并减轻服务器和数据库的压力。该特性在 .NET 7 中才被加了回来。


QQ截图20230507212028.jpg


ASP.NET Core 中的输出缓存中间件:https://learn.microsoft.com/zh-cn/aspnet/core/performance/caching/output?view=aspnetcore-7.0

输出缓存的原理:每次请求先判断是否在缓存中存在,如果不存在,将响应的内容写入到缓存中再输出响应,如果缓存存在,则直接从缓存中获取数据输出响应。通过输出缓存减少对数据库的查询,减少了一些逻辑运算,直接从缓存中获取,既提升了并发又提升了响应速度

由于 .NET 6 中没有 OutputCacheAttribute 特性,我们可以自己实现一个简单的输出缓存。


在没有输出缓存的情况下,压测结果如下(项目数据库连接的香港服务器):

QQ截图20230507212834.jpg

压测结果:每秒才允许 10 个并发(慢在数据库传输)。

尝试新增输出缓存,首先,新建 OutputCacheAttribute 特性,代码如下:

新建 OutputCacheMiddleware 中间件拦截请求,代码如下:

在 Program.cs 添加使用 UseOutputCacheExtensions 中间件,代码如下:

最后,在控制器方法添加该特性,代码如下:

再次进行压测,可以达到每秒 1万多并发,如下图:

cassowary.exe run -u http://localhost:5222/zh-cn -c 50 -n 100000
QQ截图20230507213548.jpg
QQ截图20230507213648.jpg QQ截图20230507214048.jpg

HTTP 请求压测之 Cassowary 工具
https://www.itsvse.com/thread-10557-1-1.html
(完)




上一篇:【转】.NET 8 新添加的高性能类型的介绍
下一篇:.NET Core 高性能队列 Channels 使用
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2023-5-7 21:50:45 | 显示全部楼层

回顾

ASP.NET Core(十七)集成 MiniProfile 应用性能分析
https://www.itsvse.com/thread-10571-1-1.html

ASP.NET Core(十六)依赖注入之动态注册服务
https://www.itsvse.com/thread-10560-1-1.html

ASP.NET Core(十五)使用 HttpClient 发送 HTTP 请求
https://www.itsvse.com/thread-10311-1-1.html

ASP.NET Core(十四)基于 SkiaSharp 图片验证码
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core(十三)判断是否是 Ajax 请求
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core(十二)前端 JS、CSS 捆绑和压缩
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core(十一)端点路由添加中间件显示所有 DI 服务
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Core(十)Configuration 配置优先级详解
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Core(九) 之 Middleware 中间件详解
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Core 中间件(Middleware)详解
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET Core(八) 之 Swagger UI 默认参数的坑
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core(七)深入刨析框架源码
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core(六)DI 手动获取注入对象的方法
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core(五)基于 CAP 分布式事务
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(四)之过滤器统一 ModelState 模型验证
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core(三)使用 ActivatorUtilities 动态创建实例
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Core(二)通过代码自重启应用
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core(一)使用 Redis 缓存
https://www.itsvse.com/thread-9393-1-1.html
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2023-5-7 21:53:14 | 显示全部楼层
关于asp.net OutputCache 缓存刷新禁用设置
https://www.itsvse.com/thread-5843-1-1.html

ASP.NET OutputCache缓存web.config参数配置
https://www.itsvse.com/thread-4917-1-1.html

mvc缓存OutputCache属性VaryByParam的正确用法
https://www.itsvse.com/thread-3488-1-1.html
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2023-5-8 09:37:41 | 显示全部楼层
学习学习
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2023-5-17 10:37:28 | 显示全部楼层
HTTP状态码:204 No Content

204 No Content:服务器成功处理了请求,但没返回任何内容。

Writing to the response body is invalid for responses with status code 204.
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2023-6-22 13:20:52 | 显示全部楼层
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-3-28 18:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表