我们正在将asp.net站点移动到Azure Web角色和Azure Sql数据库。该站点正在使用输出缓存和普通的Cache [xxx](即HttpRuntime.Cache)。现在,它们以经典的方式存储在Web角色实例内存中。
低悬的成果是首先开始使用分布式缓存进行输出缓存。我可以使用角色内缓存,无论是共存还是专用缓存角色,还是Redis缓存。两者都准备好了outputcache提供程序。
两者(具有共址/专用)缓存方法之间是否存在性能差异?
要考虑的一件事是,从每个服务器上的每个页面加载中获取Redis页面的速度要比每隔120秒从一个服务器编写一个页面更快或更慢,但只是从本地内存中获取它?
当我们想要在分布式缓存中开始缓存我们自己的数据(即pocos)而不是HttpRuntime.Cache时,哪个会扩展得更好?
-Mathias
答案 0 :(得分:10)
单独回答您的每个问题:
两者之间是否有任何性能差异(thee with 共存/专用)缓存方法?
最终共存的缓存解决方案比专用缓存服务器更快,因为在共处一位/ inproc解决方案请求中将在本地处理,因为专用缓存解决方案将涉及通过网络获取数据。但是,由于数据将在缓存服务器上内存,因此获取仍然比从数据库获取更快。
要考虑的一件事是从Redis获取页面 每个服务器上的每个页面加载都比编写它更快或更慢 页面从头开始,每120秒一个服务器,但介于两者之间 从本地记忆中获取它?
这取决于页面上的对象数量,即从头开始撰写页面所花费的时间。虽然从缓存中获取将涉及网络旅行时间,但其大部分时间只有几分之一。
当我们想要开始缓存我们自己的数据时,哪个会更好地扩展 (即pocos)在分布式缓存中而不是HttpRuntime.Cache?
由于HttpRuntime.Cache是进程内缓存,因此它仅限于单个进程的内存,因此它不可伸缩。另一方面,分布式缓存是一种可扩展的解决方案,您可以随时添加更多服务器以增加缓存空间和吞吐量。此外,分布式缓存解决方案的out-proc性质使得可以访问由应用程序进程缓存的数据,以供任何其他进程使用。
您还可以将NCache for Azure视为分布式缓存解决方案。 NCache是一个原生的.Net分布式缓存解决方案。
以下Iqbal Khan撰写的博客文章将帮助您更好地了解ASP.Net应用程序的分布式缓存需求:
我希望这会有所帮助: - )
-Sameer