如何在不知道区域的情况下通过标记从缓存中获取项目

时间:2011-03-15 18:55:53

标签: c# appfabric

我们正在使用MS Velocity,并很快转向AppFabric。我们感兴趣的是可能使用标签在将来从缓存中检索项目。 Velocity / App Fabric API包含一个类似于

的添加方法
public DataCacheItemVersion Add(string key, 
                                object value, 
                                IEnumerable<DataCacheTag> tags);

但是,没有可用于使用不需要指定区域的标记从缓存中检索对象的方法。

问题是,如果在不指定区域的情况下使用Add(),则不知道缓存管理器将对象放入哪个区域;因此,在检索对象时无法指定区域。我错过了一些非常简单的东西吗?

3 个答案:

答案 0 :(得分:2)

如果您正在使用DataCache类,那么有几个可用的重载,包括第一个只指定密钥的重载:

  
      
  • DataCache.Get(String) - 使用指定的密钥从缓存中获取对象。
  •   
  • DataCache.Get(String,out DataCacheItemVersion) - 使用指定的密钥从缓存中获取对象。如果该版本仍然是缓存中的最新版本,您还可以提供版本以获取密钥的特定版本。
  •   
  • DataCache.Get(String,String) - 使用指定的键从指定区域获取对象。
  •   
  • DataCache.Get(String,out DataCacheItemVersion,String) - 使用指定的键从指定区域获取对象。如果该版本仍然是该区域中最新的版本,您还可以提供该版本以获取密钥的特定版本。
  •   

来自http://msdn.microsoft.com/en-us/library/microsoft.data.caching.datacache.get.aspx

答案 1 :(得分:2)

我终于在MSDN中找到了我的问题的答案。可以看到here。事实证明,当您调用接受标记的重载Add()方法(我最初发布的方法)时,您无法根据标记检索对象。链接文件指出:

  

如果该对象存储在某个区域中,则标签只能用于检索缓存对象。此重载不会将对象存储在区域中。

因此,使用该重载,标签基本上只是元数据。

感谢其他答案。我对他们两人进行了投票,因为他们帮助我找到了这个答案。

答案 2 :(得分:1)

您可以遍历所有区域,但这不是一种非常优化的获取数据的方式。

foreach (string regionName in cache.GetSystemRegions())
{
    string value = cache.Get(regionName, key);
}

但是Get(key)应该适用于Add(key)。有关迭代区域的详细信息,请参阅this question and answer