Azure Redis缓存与用于输出缓存的角色内缓存之间的性能差异

Mat*_*und 5 caching azure redis azure-in-role-cache

我们正在将asp.net站点移动到Azure Web角色和Azure Sql数据库.该站点正在使用输出缓存和普通的Cache [xxx](即HttpRuntime.Cache).现在,它们以经典方式存储在Web角色实例内存中.

悬而未决的成果是首先开始使用分布式缓存进行输出缓存.我可以使用角色内缓存,无论是共存还是与专用缓存角色或Redis缓存.两者都准备好了outputcache提供程序.

两者(具有共址/专用)缓存方法之间是否存在性能差异?

需要考虑的一件事是,从每个服务器上的每个页面加载中获取Redis页面的速度要比每隔120秒在每个服务器上从头开始编写页面更快或更慢,但只是从本地内存获取它?

当我们想要在分布式缓存中开始缓存我们自己的数据(即pocos)而不是HttpRuntime.Cache时,哪个会扩展得更好?

-Mathias

小智 10

单独回答您的每个问题:

两者(具有共址/专用)缓存方法之间是否存在性能差异?

绝对位于同一位置的缓存解决方案比专用缓存服务器更快,因为在共处一位/ inproc解决方案请求中将在本地处理,其中专用缓存解决方案将涉及通过网络获取数据.但是,由于数据将在缓存服务器上内存,因此获取仍然比从数据库获取更快.

需要考虑的一件事是,从每个服务器上的每个页面加载中获取Redis页面的速度要比每隔120秒在每个服务器上从头开始编写页面更快或更慢,但只是从本地内存获取它?

它将取决于页面上的对象数量,即从头开始构建页面所花费的时间.虽然从缓存中获取将涉及网络旅行时间,但其大部分时间在几分之一毫秒内.

当我们想要在分布式缓存中开始缓存我们自己的数据(即pocos)而不是HttpRuntime.Cache时,哪个会扩展得更好?

由于HttpRuntime.Cache是​​进程内缓存,因此它仅限于单个进程的内存,因此它不可伸缩.另一方面,分布式缓存是一种可扩展的解决方案,您可以随时添加更多服务器以增加缓存空间和吞吐量.此外,分布式缓存解决方案的out-proc性质使得可以访问由应用程序进程缓存的数据以供任何其他进程使用.

您还可以将NCache for Azure视为分布式缓存解决方案.NCache是一个原生的.Net分布式缓存解决方案.

以下Iqbal Khan的博客文章将帮助您更好地了解ASP.Net应用程序的分布式缓存需求:

我希望这有帮助 :-)

-Sameer