分布式缓存 正变得非常流行,因为它是提高应用程序性能和可扩展性并在不减慢速度的情况下处理极端事务负载的强大方法。 .NET 和 Java 应用程序每天都在越来越多地使用它。
但是,人们使用分布式缓存面临的一个挑战是如何映射和存储 关系数据 在分布式缓存所在的 HashTable (key, value) 配对存储中。 今天的大多数缓存都没有提供任何机制来处理这个问题。 今天,我将讨论 ASP.NET Cache 提供的数据依赖,以及 NCache 从第一天开始合并。
就像 ASP.NET 缓存一样,在 NCache, 数据依赖 允许您在分布式缓存中指定两个缓存项之间的依赖关系。 缓存项 A 依赖于缓存项 B。并且,如果 B 曾经更新或从分布式缓存中删除,则自动删除 A。 这确保了如果数据库中的 A 和 B 之间存在参照完整性约束,它也会在分布式缓存中得到遵守。 您还可以指定级联数据依赖关系,其中 A 依赖于 B,B 依赖于 C。然后,如果您更新或删除 C,A 和 B 都将被删除。 以下是数据依赖的一个简短示例:
Data Dependency 允许您在分布式缓存中创建一对一、一对多和多对多的关系。 以下是处理不同场景的方法:
一对一的关系
有 一对一 与 B. 添加 B 没有任何数据依赖关系。 然后,添加 A 并为 B 指定一个数据依赖关系。如果 A 和 B 都具有相互依赖关系,那么之后更新 B 并指定对 A 的依赖关系。
一对多关系
有 一个一对多 与 B. 首先添加 A 没有任何数据依赖关系。 然后,添加一个或多个 B 项,并为所有这些项指定给定 A 的数据依赖关系。 这样,如果 A 被更新或删除,所有 B 将被自动删除 NCache.
多对多关系
A 和 B 之间是多对多的。 添加一个或多个 A。 然后,添加一个或多个 B 并为适当的 A 指定数据依赖关系。 然后,返回并更新 A 以指定适当 B 的数据依赖关系。
这是一个在缓存中创建一对一依赖的简单示例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
public static void CreateDependencies(ICache _cache) { try { string keyB = "objectB-1000"; Object objB = new Object(); string keyA = "objectA-1000"; Object objA = new Object(); // Initializing cacheItems var itemOne = new CacheItem(objA); var itemTwo = new CacheItem(objB); // Adding objA dependent on ObjB itemOne.Dependency = new KeyDependency(keyB); //Adding items to cache _cache.Add(keyB, itemTwo); _cache.Add(keyA, itemOne); // Removing "objB" automatically removes “objA” as well _cache.Remove(keyB); _cache.Dispose(); } catch (Exception e) { throw; } } |
所以, NCache 允许您利用数据依赖性并在分布式缓存中指定数据关系。 下载完整的 60 天试用版 NCache Enterprise 并亲自尝试一下。
感谢分享博客,关于数据依赖的解释很好,值得花时间阅读这个博客。
嗨,伊克巴尔,感谢您分享 imairnftove 文章。 你能解释一下分布式缓存吗? 这是否意味着在不同的(物理)前端服务器和数据库服务器上维护缓存?我有一个场景前端服务器(FS)1 是维护本地缓存 C1。 FS2 正在维护自己的本地缓存 C2。 FS3 正在维护自己的本地缓存 C3。 有具有全局缓存 GC 的数据库服务器。 所有的本地缓存 C1、C2、C3 都需要依赖 GC。 如果 GC 更新,则所有本地缓存都将失效。 我不知道这将如何工作,因为在我看来,我们无法控制其他系统上的内存?请对此有所了解。谢谢Khusi
NCache 是一个进程外的内存分布式缓存。 它可以在运行时形成一个缓存节点集群,并且可以分布在多个应用程序中。
这是怎么回事 NCache 将处理您的情况:
您可以在数据库服务器或专用缓存服务器上创建全局集群缓存(例如集群中有 2 个节点),然后可以在每个前端服务器 FS1、FS2 和 FS3 上使用“客户端缓存”功能。 NCache 客户端缓存是运行在 NCache 客户端框(Web/App 服务器是 NCache 客户端)并在客户端机器上本地保存一份数据副本,该客户端机器最常从集群缓存中访问。
对相同数据的后续调用将直接从本地客户端缓存中提供服务,通过节省网络行程来提供更高的性能,客户端缓存本质上也可以是进程内的。
数据同步由自动管理 NCache. 如果全局集群缓存发生更新,客户端缓存将自动使项目无效/删除,并在后续访问时从集群缓存中获取更新的副本。
嗨伊克巴尔,
感谢您分享内容丰富的文章。 你能解释一下分布式缓存吗? 这是否意味着在不同(物理)前端服务器和数据库服务器上维护缓存?
我有一个场景——前端服务器 (FS)1 正在维护本地缓存 C1。 FS2 正在维护自己的本地缓存 C2。 FS3 正在维护自己的本地缓存 C3。 有具有全局缓存 GC 的数据库服务器。 所有的本地缓存 C1、C2、C3 都需要依赖 GC。 如果 GC 更新,则所有本地缓存都将失效。 我不知道这将如何工作,因为在我看来我们无法控制其他系统上的内存?
请对此有所了解。
谢谢
胡西
这真的是一个很好的和有用的信息。 很高兴您与我们分享了这些有用的信息。 请像这样通知我们。 感谢分享。