AppFabric的市场退出后,.NET 行业仍处于内存分布式缓存成为竞争者的困境中。 虽然已经出现了一些替代方案,但没有一个提供像 NCache.
NCache 是一种开源的内存分布式缓存,它为用户提供了一个非常快速且线性可扩展的分布式缓存,用于缓存应用程序数据并减少昂贵的数据库访问。 NCache 是一种经过验证的市场商品,比 App Fabric 早了大约五年。 正如我们在下面讨论的那样,在迁移过程结束时,还有许多优势等待着您。
NCache 更多信息 AppFabric 结束 AppFabric 移民
1. 保持缓存新鲜
数据库同步是高质量内存分布式缓存的关键特性。 由于您通常会在应用程序和数据库之间的中间层找到分布式缓存,因此数据很可能会直接更新到数据库或独立缓存。 这个问题需要一种机制来防止过时的数据。
因此,这种分布式缓存必须允许您指定缓存的项目与其在数据库中的相应项目之间的关系或依赖关系。 因此,每当数据库更改时,其更改都会通过失效或更新反映在缓存中。
例如, NCache 提供 SQL依赖关系 支持 SQL Server。 您可以使用基于 SQL 语句的数据集创建缓存项的依赖关系。 每当该特定数据集更改或修改时,SQL Server 都会向 NCache,缓存项失效。 例如,CacheItem item = newCacheItem(myObject);
1 2 3 4 5 6 7 8 9 10 11 |
// Get orders against customerID from DB var order = FetchOrderByCustomerID("ALFKI"); // Generate a unique cache key for the order string key = $"Order:{order.OrderID}"; CacheItem item = new CacheItem(order); // Create SQL query to select the data from the database string query = "SELECT CustomerID, Address, City FROM dbo.Customers WHERE CustomerID = 'ALFKI';"; //Specify the database connection string and the query to create and set SQLCacheDependency. item.Dependency = new SqlCacheDependency(dbConnString, query); // Insert the item into the cache cache.Insert(key, item); |
因此,缓存将与数据库同步。 NCache 还通过我们的 Oracle、OleDB 甚至非关系数据源(如 FileSystems 持久存储.
2.SQL 查询
特定 NCache的同步能力,很容易考虑将所有数据保存在缓存中。 不幸的是,这会带来一个小问题,因为如果通过 Key 获取是唯一的选择,则只能通过缓存数据进行搜索。 NCache 通过 SQL 查询提供了一个解决方案。 这可以通过 索引 选择 .NET 对象属性并执行搜索查询。
1 2 3 4 5 6 7 8 9 |
//string query = "SELECT * FROM FQN.Product WHERE UnitsInStock > ?"; var queryCommand = new QueryCommand(query); queryCommand.Parameters.Add("UnitsInStock",0); ICacheReader reader = cache.ExecuteReader(queryCommand); while (reader.Read()) { string ID = reader.GetValue("ProductID"); string Name = reader.GetValue("ProductName"); } |
为了提升开发者的体验, NCache 还可以让您分配 团体, 标签及 命名标签 到您的缓存项目,您以后可以在 SQL 查询中使用这些项目快速获取项目。
3. LINQ 查询
同样, NCache 为用户提供通过 LINQ 查询遍历其数据的机会,如下所示。
1 2 3 4 |
IQueryable products = new NCacheQuery(cache); var result = from prod in products where prod.ProductID > 1001 select prod; |
此外,您可以使用已识别的进一步定制这些查询 合乎逻辑, 聚合及 通配符 运营。
4. 服务器端代码
通常,分布式缓存只是帮助应用程序从数据库中获取数据并将其插入缓存中。 但是,另一种方法是您的应用程序将此责任委托给分布式缓存。 本质上,当您的应用程序从缓存中请求一个项目时,它会确定所讨论的项目是否存在于缓存中,并从数据库中加载相应的数据。 此功能称为 通读. NCache 提供类似的 直写 选项,它允许通过缓存直接对数据源进行写操作。
和 NCache“ 服务器端功能 Cache Loader & Refresher 走得更远。 此功能成功克服了所有缓存在启动时面临的初始性能差距,因为它们一开始是空的。 您可以使用加载器来识别您需要的数据并进行预加载。 复习只是为了确保这些数据不会过时。
NCa https://www.alachisoft.com/resources/docs/ncache/prog-guide/server-side-api-programming.htmlche 还提供了一个完整的 MapReduce 框架,您可以在其中对缓存的数据执行分析并实时生成可操作的见解。 MapReduce 代码是用 .NET 编写的,因此在 NCache 的过程。
NCache 更多信息 地图缩小 NCache 加载器和刷新器
5.客户端缓存(近缓存)
A 客户端缓存, 位于您的 Web 服务器或应用程序的本地,并允许您在同一进程或服务器计算机中缓存经常使用的数据。 因此,客户端缓存是一种亲和性缓存,通过降低网络带宽成本而不会影响数据完整性,从而进一步提升应用程序的性能。 客户端缓存适用于所有 NCache 成簇 缓存拓扑 (镜像、分区和分区副本缓存)。
它通过与缓存集群保持连接并通过复制主缓存集群中的更改来同步来实现这一点。 和...之间的不同 AppFabric 本地缓存和 NCache 客户端缓存是这样的 AppFabric 本地缓存是独立的,不会创建与主集群的连接。
6. 多数据中心支持
WAN 复制是另一个对高品质内存分布式缓存至关重要的功能, AppFabric 缺乏。 它对地理分布的数据中心最有用——用于本地流量的灾难恢复或负载平衡。
NCache 提供桥接拓扑来处理 WAN 延迟。 这 NCache 桥 在全球不同的缓存之间复制并保持一致性。 您可以选择让缓存集群保持被动状态以模拟集群副本以进行灾难恢复,或者在不同的数据中心同步两个单独的缓存。 数据通过安全的 Internet 连接异步复制。
7.动态集群
所有 AppFabric 客户可能知道,他们的集群不是完全动态的。 Microsoft 对其lead-hosts-majority-rule 的依赖意味着一个非常容易出错的集群,即使其中一个主要主机出现故障,它也很容易发生故障。 这些主要主机节点也类似于主从架构,也不是完全对等的。
或者, NCache is 高度动态 并允许您在运行时添加或删除缓存服务器而不会中断。 数据会自动重新平衡(或 状态转移) 在运行时没有任何性能下降。 NCache 客户端自动维护与缓存服务器的通信通道,与服务器状态无关。 此外,它的缓存集群即使在数据平衡(状态传输)正在进行时也能确保客户端操作的执行。
这意味着集群中不存在主节点或从节点。 有一个主协调节点,它是高级节点。 如果它出现故障,下一个最高级的节点会自动成为主协调器。 所有这些都不会中断客户的操作。
8. 第三方集成
最重要的是, NCache 官方支持不同重要第三方库的提供者,例如:
结论
总之, NCache 介绍了企业在其 .NET 应用程序中使用和需要的各种功能。 特别是那些 AppFabric 在其生命周期的任何时候都没有考虑引入。 因此,如果您想尽最大努力并投资于真正满足您需求的分布式缓存系统,请下载 NCache 进行无痛迁移。
NCache 更多信息 下载 NCache 版本比较