任何允许标记内容的分布式缓存系统?

时间:2009-09-04 09:45:03

标签: memcached tagging appfabric distributed-caching

我想知道是否有像memcached,velocity或sharedcache这样的分布式缓存系统,它允许我用不仅仅是它的名称来标记内容,或者可以将项目关联到彼此,所以如果我使缓存无效一个项目也会使相关项目无效。

例如。如果我有两个页面引用相同的数据并且数据发生变化,我希望两个引用页面的缓存无效。

  • 或者这是否是其中一个要求开发的项目的补充? :)

编辑:我在asp.net上

3 个答案:

答案 0 :(得分:3)

我相信可以使用memcached的cas(check-and-set)操作删除相关数据。每个值都有一个唯一的ID(序列号)。对于每个密钥,存储另一个key.dependents,它具有数据序列和所有依赖项的密钥。

当要添加依赖项时,请执行

dependents, dep_serial = fetch(key+".dependents")
data, serial = fetch(key)
if serial != dependents[0]:
    # somebody changed the actual data
    start_over
generate_and_cache_dependent(dep_key, data)
dependents.append(dep_key)
if not cas(dependents, dep_serial):
   # somebody changed dependents
   start_over # can avoid regenerating the data if they are still at serial

当项目无效时,请执行

dependents, dep_serial = fetch(key + ".dependents")
serial = update(key, new_data)
for dkey in dependents[1:]:
    delete(dkey)
dependents = [serial]
if not cas(dependents, dep_serial):
    start_over

即使存在冲突的写入,这些算法最终也会终止,因为一个作家总是“通过”。

答案 1 :(得分:0)

Velocity支持标记每个标记为字符串的位置。可以通过标签或多个标签来检索对象,例如'调味品'和'免费送货'。

然而,Velocity不支持依赖--IndRC Velocity团队表示依赖关系不会出现在v1中。

答案 2 :(得分:0)

实现依赖是非常困难的,但是共享缓存(http://www.sharedcache.com || http://sharedcache.codeplex.com)的所有其他功能都可能适合您的缓存需求。

问候,罗尼