2

We are using MS Velocity, and moving to AppFabric soon. We are interested in possibly using tags to retrieve items from the cache in the future. The Velocity/App Fabric API includes an add method that look like

public DataCacheItemVersion Add(string key, 
                                object value, 
                                IEnumerable<DataCacheTag> tags);

However, there are no methods available for retrieving objects from the cache using tags that do not require a region to be specified.

The problem is that if you use Add() without specifying the region, you have no idea what region the cache manager put the object into; thus you cannot specify the region when retrieving the object. Am I missing something really simple here?

PhilPursglove
  • 12,511
  • 5
  • 46
  • 68
John Kraft
  • 6,811
  • 4
  • 37
  • 53

3 Answers3

2

If you are using the DataCache class then there are several overloads available, including the first one which only specifies a key:

  • DataCache.Get (String) - Gets an object from the cache using the specified key.
  • DataCache.Get (String, out DataCacheItemVersion) - Gets an object from the cache using the specified key. You may also provide the version to obtain the specific version of a key, if that version is still the most current in the cache.
  • DataCache.Get (String, String) - Gets an object from the specified region by using the specified key.
  • DataCache.Get (String, out DataCacheItemVersion, String) - Gets an object from the specified region by using the specified key. You may also provide the version to obtain the specific version of a key, if that version is still the most current in the region.

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

Stuart
  • 66,722
  • 7
  • 114
  • 165
2

I finally found the answer to my question in the MSDN. It can be seen here. As it turns out, when you call the overloaded Add() method (the one I originally posted) that accepts tags, you cannot retrieve the object based on the tags. The linked document states:

Tags may only be used to retrieve a cached object if that object is stored in a region. This overload does not store the object in a region.

So, using that overload, the tags essentially just become metadata.

Thanks for the other answers. I up-voted both of them, because they helped lead to me finding this answer.

John Kraft
  • 6,811
  • 4
  • 37
  • 53
1

You can iterate through all regions, but it is not a very optimized way of getting data.

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

But Get(key) should work for Add(key). See this question and answer for more info on iterating regions.

Community
  • 1
  • 1
Tedd Hansen
  • 12,074
  • 14
  • 61
  • 97