gpt4 book ai didi

caching - 分布式对象缓存框架和基于 key 的依赖项

转载 作者:行者123 更新时间:2023-12-01 02:26:46 24 4
gpt4 key购买 nike

我一直在研究几个缓存框架。
Memcached/Couchbase、AppFabric、Redis、MongoDB

好的.. 其中一些实际上是缓存框架,另一些是“文档存储”。

现在问题来了...
我经常遇到我根本不知道所有缓存键(例如所有缓存产品)的情况,但例如我想确保所有缓存产品都被驱逐。使用 Runtime.MemoryCache 我可以使用 基于键的依赖项,例如,允许我创建“产品”键,所有其他产品都使用此键作为依赖项 .现在,每当我删除“产品”时,与此 key 相关的所有 key 也会被逐出。

不幸的是 MongoDB、Couchbase 和 Redis 没有这样的功能。 至少我找不到任何关于它的信息。 Redis 有 KEYS ( http://redis.io/commands/keys ) 命令,但文档告诉您不要在生产环境中使用它。

AppFabric 能够处理依赖关系,但还有其他缺点。例如。如果您使用标签(用作依赖项),您也必须使用区域。但是,如果您使用区域,则会失去高可用性。

无论如何......我的问题是:这是一个非常罕见的场景,需要这些依赖项,还是我评估的那些数据库/缓存框架的缺点?

最佳答案

简单地回答您的问题:这是您要测试的缓存框架的缺点,而且需要这些依赖项的情况并不少见。事实上,任何可行的缓存解决方案都必须至少具有与关系或非关系数据存储同步的能力。

正如您所提到的,基于键的依赖关系将一个缓存项与缓存中的另一个项相关联。当特定项更改时,它会使依赖项无效。每当从缓存中删除或更新该项目时,关联的对象都将过期。基于键的依赖是级联的。例如,如果 key1 依赖于 key2,key2 依赖于 key3,key3 依赖于 key4,那么删除 key4 将导致 key1、key2 和 key3 过期。

除了基于键的依赖项之外,您还可以使用其他依赖项,例如基于文件的(使您的缓存对象依赖于外部文件,如果文件被更新或删除,则缓存中的依赖对象将被删除)、数据库依赖(将缓存项目与数据库同步,因此数据库中的任何更改都会从缓存中删除依赖的缓存对象)、自定义依赖(您可以根据应用程序逻辑使对象过期)。

NCache就是这样一种产品,它根据您的应用程序需求提供了一套完整的依赖特性。

关于caching - 分布式对象缓存框架和基于 key 的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15679445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com