关于asp.net core mvc页面缓存压缩的问题,求大神指点一二

黑子大哥 2019-02-18 02:19:15
是这样子的,使用asp.net core开发的网站,输出的html去掉空格,换行符号等,请问怎么操作?

页面缓存怎么做呢?我想实现,当页面被访问的时候自动生成服务器的本地缓存文件,当文件未过期的时候直接返回缓存内容,已过期或者尚未缓存的情况下就生成一分新的缓存,方便下次调用,

起初我想过添加一个属性,不存在缓存或者已过期直接保存html到本地,存在就直接读取HTML内容返回即可,问题是设计到高并发,如果同时一百个人访问,正好缓存内容过期了,那么就会发生一百个访问都需要生成,肯定会发生并发写入,如果用lock,那么就会导致这一百个访问非常非常的慢。如果用队列,将需要缓存的内容暂存一下,开额外的线程顺序写入,那么也会存在一个问题,被读的文件不能被写入,也会抛出异常(可能存在,比如首页正在被打开读取内容,同时被判定为过期,写入,打开会抛出异常)。请问一下怎么解决这个问题呢?

看了ResponseCache属性,这个属性实际上是在页面header添加了max-age内容,如果按F5还是会进入控制器,所以他不能满足要求。
...全文
122 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
圣殿骑士18 2019-02-18
  • 打赏
  • 举报
回复
如果你真的很在乎在100ms,你1ms也不想等,那你自己写缓存,设计这个逻辑也不难。

1、页面文件要设计有版本号,不同的版本不同文件
2、100个请求排队,刚好页面过期了。这时,开启新线程,开始生成新版本的页面文件。100个请求仍然请求旧版本页面。设置生成标记值created = false;
3、在第90个请求获取页面时,文件生成完成,created被设置为false。
4、请求检测到created = true,开始提取新版本页面。
5、删除旧版本页面。

==========
欢迎关注微信公众号 “产品技术知与行” ,打造全面的结构化知识库,包括原创文章、免费课程(C#,Java,Js)、技术专题、视野知识、源码下载等内容。
最新文章:多种Timer的场景应用 https://mp.weixin.qq.com/s/TJKi7PBj3nznf9FClirXUA
圣殿骑士18 2019-02-18
  • 打赏
  • 举报
回复
输出的html去掉空格,换行符号等
==
没有必要。html静态文件的话,iis本身就有静态压缩功能的,空格换行压缩后几乎不占空间。开启配置就行。

另,你说的缓存,P哥说的方式应该足够用了。按照我的理解,你所谓的担心100个并发导致所谓锁啊,很慢啊,这个应该多虑了。系统自带的缓存也会有你说的这个问题。缓存过期了,重新提取的第一次,当然会慢一点,但会很慢?没有的事,因为通过逻辑可以推理的。加入100个请求在排队请求页面,刚好页面过期了,那么要先等页面再生成,这个时间是多少?假设100ms,那么100个请求也只需要等待100ms,是不是?会慢一点点,但不会很慢。如果真的很慢,说明你一个页面生成可能是10秒,那要等10秒是慢了。

  • 打赏
  • 举报
回复
依赖 CacheDependency 设置来自动清除脏缓存 ==> 依赖 OutputCache 设置来自动清除脏缓存
  • 打赏
  • 举报
回复
asp.net 本身是有页面缓存机制的,页面可以依赖 CacheDependency 设置来自动清除脏缓存。既不需要你重新发明,也不需要你担心“100个人并发”的情况。
  • 打赏
  • 举报
回复
假如说两三个请求(并且恰好在需要抛弃缓存的时候)并发的概率假设是2%的话,那么请问100个请求(并且也恰好是需要抛弃缓存的时候)并发的概率请问是多少?
黑子大哥 2019-02-18
  • 打赏
  • 举报
回复
没有人吗? 我就想知道怎么做文件缓存依赖,可防并发!!!!没人知道么?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧