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

标签 caching azure redis azure-in-role-cache

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

最容易实现的目标是首先开始使用分布式缓存进行输出缓存。我可以使用角色内缓存(作为共置缓存或与专用缓存角色一起使用)或 Redis 缓存。两者都已准备好输出缓存提供程序。

两种(使用并置/专用)缓存方法之间是否存在性能差异?

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

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

-马蒂亚斯

最佳答案

单独回答您的每个问题:

Are there any performance differences between the two (thee with co-located/dedicated) cache methods?

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

One thing to consider is that will getting the page from Redis for every pageload on every server be faster or slower than composing the page from scratch one every server every 120 seconds but inbetween just getting it from local memory?

这将取决于页面上对象的数量,即从头开始构建页面所需的时间。虽然从缓存获取会涉及网络传输时间,但大部分时间都在几分之一毫秒内。

Which will scale better when we want to start caching our own data (i.e. pocos) in a distributed cache instead of HttpRuntime.Cache?

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

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

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

我希望这有帮助:-)

-萨米尔

关于caching - 用于输出缓存的 Azure Redis 缓存和角色内缓存之间的性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26297511/

相关文章:

java - Spring中缓存方法最简单/最透明的方式是什么?

azure - Azure AD B2C 页面 UI 自定义不支持 Bootstrap 吗?

lua - 如何使用 Lua 脚本在 Redis 中使用 sscan?

redis - 建议 - Redis 或 RabbitMQ PubSub - 拍卖服务

arrays - C - 缓存行和关联

caching - PHPExcel 内存耗尽

c# - Azure辅助角色抛出System.IO.FileNotFoundException

Redis SCARD 结果与 SMEMBERS 返回的集合大小不匹配

file - CakePHP 2.0 - Cake 无法写入文件缓存

azure - 从 Append Blob 复制到 BlockBlob