5

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

唾手可得的成果是首先开始使用分布式缓存进行输出缓存。我可以使用角色内缓存,无论是在同一位置还是与专用缓存角色一起使用,或者是 Redis 缓存。两者都已准备好输出缓存提供程序。

两种缓存方法(使用同位/专用)缓存方法之间是否存在任何性能差异?

需要考虑的一件事是,对于每台服务器上的每个页面加载,从 Redis 获取页面会比每 120 秒每台服务器从头开始编写页面更快或更慢,但介于两者之间只是从本地内存获取它?

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

-马蒂亚斯

4

1 回答 1

11

分别回答您的每个问题:

两种缓存方法(使用同位/专用)缓存方法之间是否存在任何性能差异?

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

需要考虑的一件事是,对于每台服务器上的每个页面加载,从 Redis 获取页面会比每 120 秒每台服务器从头开始编写页面更快或更慢,但介于两者之间只是从本地内存获取它?

这将取决于页面上的对象数量,即从头开始编写页面所花费的时间。虽然从缓存中获取将涉及网络行程时间,但它主要在几分之一毫秒内。

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

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

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

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

我希望这有帮助 :-)

-Sameer

于 2014-10-20T18:49:57.517 回答