我一直在研究几个缓存框架。即Memcached/Couchbase、AppFabric、Redis、MongoDB
好的..。其中一些实际上是缓存框架,另一些则是“文档存储”。
现在出现了一个问题.,我经常遇到这样的情况:我根本不知道所有的缓存键(例如,所有缓存的产品),但是我想确保所有缓存的产品都被逐出了。使用Runtime.MemoryCache,我可以使用基于键的依赖关系,例如,它允许我创建一个" products“键,所有其他产品都使用这个键作为依赖项。现在,每当我移除“产品”时,与此键相关的所有键都会被逐出。
不幸的是, MongoDB、Couchbase和Redis没有提供这样的功能。至少我找不到关于它的任何信息。Redis有键(http://redis.io/commands/keys)命令,但是文档告诉您不要在生产环境中使用它。
AppFabric能够处理依赖关系,但还有其他缺点。例如,如果您使用标记(用作依赖项),则还必须使用区域。但是,如果使用区域,则会失去高可用性。
总之..。我的问题是:这是一个非常不常见的场景需要这种依赖,还是它是一个缺点,这些数据库/缓存框架,我提出了评估??
发布于 2013-05-15 10:51:23
要简单地回答您的问题:您要测试的缓存框架是很短的,而且想要这种依赖关系也并不少见。事实上,任何可行的缓存解决方案至少必须具有与关系或非关系数据存储同步的能力。
正如您提到的,基于键的依赖项将缓存的一个项与缓存中的另一个项关联起来.当该特定项更改时,它将使该依赖项无效。无论何时从缓存中删除或更新该项,关联对象都将过期。基于密钥的依赖项是级联的。例如,如果key1依赖于key2,key2依赖于key3,key3依赖于key4,那么key4的删除将导致key1、key2和key3的过期。
除了基于键的依赖项之外,还有其他基于文件的依赖项(使缓存对象依赖于外部文件,如果文件被更新或删除,缓存中的依赖对象将被删除)、数据库依赖项(将缓存的项与数据库同步,因此数据库中的任何更改都会从缓存中删除依赖的缓存对象)、自定义依赖项(您可以根据应用程序逻辑将对象过期)。
NCache就是这样一种产品,它根据您的应用程序需求提供了一整套依赖特性。
https://stackoverflow.com/questions/15679445
复制相似问题