本地缓存
NCache 支持驻留在单个节点上的独立非集群缓存。本地缓存在功能上与其他集群缓存类似,即它具有任何其他缓存拓扑中提供的所有缓存功能,但它不像集群缓存那样可扩展或容错。由于它是单个服务器缓存,因此无法通过添加多个服务器来增加其事务容量。此外,它还会创建单个缓存实例(无备份或副本),因此,如果它发生故障,所有缓存的数据都会丢失。本地缓存适用于客户端数量较少且活动性较低的应用程序或应用程序不需要缓存大量数据的应用程序。
本地缓存中的隔离级别
本地缓存有两个隔离级别,如下所示:
InProc(进行中)
此隔离级别意味着缓存驻留在客户端应用程序的内存空间内。 由于这种类型的缓存存在于应用程序进程内部,因此响应时间更快。 在进程内, NCache 将缓存的数据保留为活动对象(不是序列化形式),这降低了序列化/反序列化成本。 然而,此类应用程序可能面临内存限制,因为应用程序和缓存共享相同的内存。 此外,在这种情况下,缓存的数据无法与在此进程之外运行的应用程序共享。
由于对象存储在与缓存客户端相同的地址空间中,因此缓存客户端获取对缓存对象的引用而不是副本。对于多线程应用程序,多个线程正在修改同一对象,需要使用可用的各种同步技术来同步这些更改 .NET framework.
备注
尽管对象没有以序列化形式保存在 InProc 缓存中,但仍然需要将所有对象标记为 Serializable
. NCache 通过序列化对象来计算对象的大小,这有助于在需要时进行驱逐。
OutProc(进程外)
此隔离级别意味着缓存驻留在单独的进程中( NCache 服务流程)来自客户端应用程序。 多个客户端(本地和远程)可以连接到同一缓存以共享数据。 在这种情况下,由于进程外的通信成本,延迟会超过 InProc 缓存。
OutProc本地缓存适用于应用程序中的多个客户端需要访问相同缓存数据的情况。 例如,在每个 ASP.NET 应用程序在单独的工作进程中运行的网络园中,应使用 OutProc 缓存。 此外,在 ASP.NET 应用程序中,由于进程内存限制,使用 InProc 缓存实例并不被认为是最佳选择。 但请注意,在应用程序进程和缓存本身之间传输数据会产生开销。