解决 Web Farms 中的 ASP.NET 缓存限制 NCache
Microsoft 在 ASP.NET 的 Application 范围内提供了 ASP.NET Cache 对象,它允许您缓存应用程序数据并减少那些昂贵的数据库访问和 提高您的 ASP.NET 性能. 以下是 ASP.NET 缓存的典型使用方式。
using System.Web.Caching;
...
string key = "Employee:EmployeeId:1000";
Employee employee = (Employee)Cache[key];
if (employee == null){
// Load Employee from DB & put it in the Cache
LoadEmployeeFromDb(employee);
Cache.Insert(key, employee, null,
Cache.NoAbsoluteExpiration,
Cache.NoSlidingExpiration,
CacheItemPriority.Default, null );
}
Web 场中的 ASP.NET 缓存限制
ASP.NET 缓存是一个独立的进程内 (InProc) 缓存,因此如果您的应用程序部署在负载平衡的 Web 场中,则会有许多限制。 这些限制是:
- 多个缓存副本未同步: 由于 ASP.NET 缓存是独立的,因此 Web 园或 Web 场中缓存的多个副本彼此不同步。 而且,这会给您的应用程序带来主要的数据完整性问题。
- 工作进程回收时缓存丢失: 回收工作进程时,所有 ASP.NET 缓存数据都将丢失。 而且,这会导致性能问题,因为您必须再次从数据库重新加载整个缓存。
- 缓存大小问题是有限的: ASP.NET 缓存必须存在于 ASP.NET 工作进程内存限制内,这严重限制了缓存的大小。
- 通过 DB 进行缓存同步存在问题: ASP.NET Cache 中的 SQL CacheDependency 允许您将缓存与数据库同步。 而且,有些人使用它通过数据库来同步不同Web服务器上的多个缓存副本。 但是,这具有重大的性能和可伸缩性问题,因为数据库再次处于所有活动的中心,并且 SQL CacheDependency 本身不是非常可伸缩的。
分布式缓存(NCache): 网络农场解决方案
NCache 是一个分布式缓存,解决了上面提到的 ASP.NET Cache 的所有限制。 这是如何 NCache 解决这些限制:
- 在网络场中同步缓存: NCache 是一个 分布式缓存 并在网络场中的多个服务器之间同步缓存。 这意味着不存在数据完整性问题 NCache.
- 在网络花园中缓存 OutProc: NCache 是一个进程外缓存,因此多个工作进程可以共享一个公共缓存。
- 缓存大小非常可扩展: NCache 不仅将任何 ASP.NET 工作进程类型的内存大小限制,还允许您 添加更多缓存服务器 以增加存储容量。 因此,您可以轻松拥有 100GB 或更多的缓存大小。
- 网络场中高事务的缓存扩展: NCache 是一个分布式缓存并提供 可扩展的缓存拓扑。 这允许 NCache 扩展缓存集群没有任何问题。
- 缓存与数据复制高度可靠: NCache 提供 智能数据复制 在不牺牲任何性能的情况下。 这种数据复制可确保即使缓存服务器出现故障,也不会丢失任何数据。 这允许您的 ASP.NET 应用程序缓存数据而不必担心任何数据丢失。
NCache 拥有 ASP.NET 缓存 API 以及更多
NCache 提供所有 ASP.NET 缓存功能和相同的 API 加。 这使您能够 从 ASP.NET 缓存迁移到 NCache 无缝。 您只需更改命名空间 系统.Web.缓存 至 Alachisoft.NCache.Web.缓存 并确保所有被缓存的对象都是可序列化的。
此外, NCache 提供了许多 ASP.NET Cache 所没有的缓存功能。 以下是部分列表:
阅读更多关于所有 NCache 功能.
如何快速使用 NCache?
您可以采取以下一些简单的步骤来快速从中受益:
- Install 安装 NCache:在您的网络服务器和两个缓存服务器上
- 创建缓存: 通过基于 GUI NCache 管理工具
- 缓存应用程序数据 NCache: 你需要参考 NCache 组装,然后制作 NCache 用于从缓存中存储和获取 .NET 对象的 API 调用
- 监控 ASP.NET 性能:您现在可以监控 ASP.NET 性能,还可以 NCache 性能。 NCache 提供丰富的 PerfMon 计数器供您监控
接下来做什么?