Как получить элементы из кэша по тегу, не зная региона - PullRequest
1 голос
/ 15 марта 2011

Мы используем MS Velocity и скоро переходим на AppFabric.Мы заинтересованы в возможном использовании тегов для извлечения элементов из кэша в будущем.API Velocity / App Fabric включает метод add, который выглядит как

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

. Однако нет доступных методов для извлечения объектов из кэша с помощью тегов, для которых не требуется указывать регион.

Проблема в том, что если вы используете Add () без указания региона, вы не знаете, в какую область менеджер кэша поместил объект;таким образом, вы не можете указать регион при получении объекта.Я что-то упускаю здесь очень просто?

Ответы [ 3 ]

2 голосов
/ 16 марта 2011

Я наконец нашел ответ на свой вопрос в MSDN. Это можно увидеть здесь . Оказывается, когда вы вызываете перегруженный метод Add () (тот, который я первоначально опубликовал), который принимает теги, вы не можете извлечь объект на основе тегов. В связанном документе говорится:

Теги могут использоваться только для извлечения кэшированного объекта, если этот объект хранится в регионе. Эта перегрузка не сохраняет объект в регионе.

Таким образом, используя эту перегрузку, теги просто становятся метаданными.

Спасибо за другие ответы. Я проголосовал за них обоих, потому что они помогли мне найти этот ответ.

2 голосов
/ 15 марта 2011

Если вы используете класс 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 голос
/ 15 марта 2011

Вы можете выполнять итерации по всем регионам, но это не очень оптимизированный способ получения данных.

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

Но Get (ключ) должен работать для Add (ключ).См. этот вопрос и ответ для получения дополнительной информации об итерации регионов.

...