【问题标题】:How to cache images in memory on the web server for an ASP.NET MVC web app?如何在 ASP.NET MVC Web 应用程序的 Web 服务器的内存中缓存图像?
【发布时间】:2010-09-16 17:14:05
【问题描述】:
我正在使用 ASP.NET MVC 开发一个包含许多图像的 Web 应用程序。我希望能够将图像缓存在内存中以提高性能,但我想听听最好的方法是什么。
1) 可以从 URL 访问图像,例如 http://www.site.com/album/1.jpg。图像是如何存储在内存中的?它们会以内存流的形式存在吗?
2) 如何从内存中访问图像并发送到网页?现在网页将使用图像 URL 将图像直接嵌入标签中。
谢谢!
【问题讨论】:
标签:
asp.net
asp.net-mvc
caching
【解决方案1】:
Web 服务器和下游缓存不会为静态资源处理这个问题吗?不确定会有很多性能提升,但对应用程序或设置一无所知我可能是错的。
为了实现,我设置了一个页面,该页面采用图像文件名并从磁盘或内存缓存中的 asp.net 提供它。
【解决方案2】:
如果图像只是磁盘上的静态文件,那么 Beepcake 是正确的,IIS 已经缓存了经常使用的图像并从内存中提供它们。使用单独的缓存服务器不应该比 IIS 从内存中提供图像更快——它更多地与可伸缩性有关。一旦你有一个大型服务器场,这意味着你有一组服务器只处理你的代码,一组服务器只处理静态图像。此外,如果您的内容太多,一台服务器无法缓存所有内容,那么您可以路由请求,以便十台服务器中的每台都缓存不同 10% 的内容。这应该比让每台服务器缓存相同的最常用的 10% 内容要好得多。
【解决方案3】:
感谢您的回复。我想我想错了方向。我刚刚发现 Flickr 正在使用 Squid 来缓存图像。
【解决方案4】:
如果您想要真正出色的性能,我建议您使用 Amazon CloudFront。边缘缓存将为您提供比内存缓存更好的性能,并且 CloudFront 运行 nginx,这在静态文件(除其他外)上明显优于 IIS。
设置边缘缓存非常简单 - 您登录,并获得一个域来使用而不是您自己的图像 URL。