outputcaching的Azure Redis缓存和角色内缓存之间的性能差异

outputcaching的Azure Redis缓存和角色内缓存之间的性能差异,caching,azure,redis,azure-in-role-cache,Caching,Azure,Redis,Azure In Role Cache,我们正在将asp.net站点移动到Azure Web角色和Azure Sql数据库。该站点正在使用输出缓存和普通缓存[xxx](即HttpRuntime.cache)。它们现在以经典方式存储在web角色实例内存中 低挂果实是首先开始使用分布式缓存进行输出缓存。我可以在角色缓存中使用,作为同一位置或与专用缓存角色或Redis缓存一起使用。两者都有现成的outputcache提供程序 这两种(使用同一位置/专用)缓存方法之间是否存在性能差异 一个要考虑的是,从每个服务器上的每一个页面获取ReDIS的

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

低挂果实是首先开始使用分布式缓存进行输出缓存。我可以在角色缓存中使用,作为同一位置或与专用缓存角色或Redis缓存一起使用。两者都有现成的outputcache提供程序

这两种(使用同一位置/专用)缓存方法之间是否存在性能差异

一个要考虑的是,从每个服务器上的每一个页面获取ReDIS的页面要比每隔120秒一个服务器从头开始构建一个页面要快得多或慢一点,但只需从本地内存中得到一个页面就可以了。 当我们希望开始在分布式缓存中缓存自己的数据(即POCO)而不是在HttpRuntime.cache中时,哪一个可以更好地扩展


-Mathias

分别回答您的每个问题:

这两个(e)之间是否存在性能差异 共用/专用)缓存方法

确切地说,同一位置的缓存解决方案比专用缓存服务器更快,因为在同一位置/inproc解决方案中,请求将在本地处理,而专用缓存解决方案将涉及通过网络获取数据。然而,由于数据将在缓存服务器上的内存中,所以获取速度仍然比从数据库获取快

一个要考虑的事情是从ReISIS获得页面。 每个服务器上的每个页面加载都可能比编写 每120秒为每台服务器从头翻页一次,但在中间 只是从本地内存中获取

它将取决于页面上对象的数量,即从头开始合成页面所需的时间。虽然从缓存中获取数据需要网络传输时间,但大部分时间只需几毫秒

当我们想开始缓存自己的数据时,哪一个可以更好地扩展 在分布式缓存中而不是在HttpRuntime.cache中

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

您还可以将其视为分布式缓存解决方案。是本机.Net分布式缓存解决方案

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

我希望这有帮助:-)


-Sameer

谢谢你的回答。我继续使用Azure Redis缓存和StackExchange.Redis中的outputcacheprovider。与proc outputcache中的标准相比,速度当然不足。在Marc Gravell在宣布redis软件包的博客文章中“承诺”添加2层缓存(带有共享redis中央缓存的本地内存缓存,包括基于发布/订阅的缓存到期通知等)之前,存在一个折衷。如果我假设我的应用程序将只使用几个web角色,我会从proc outputcache中受益,但当我开始使用更多实例时,我会从分布式缓存中受益。@MathiasR-我一直在寻找这个问题。二级缓存有帮助吗?或者,在使用二级缓存时,您是否发现了任何问题?在我们的缓存中,缓存对象有点大,在性能测试期间,为单个用户通过网络获取它们的性能不好。@rdhaundiyal除Redis cache外,所有提到的缓存方法现在都过时了。我建议使用本地内存缓存,即Asp.Net的缓存[…],或Asp.Net核心的IMemoryCache。然后总是在缓存中设置某些内容时,也在Redis缓存中设置它。并且总是在缓存超时时,在再次生成对象之前,首先尝试从Redis缓存获取它。