ASP.Net |Кэширование элементов в хеш-таблице или отдельных элементов |Нуждается в предложении - PullRequest
2 голосов
/ 21 сентября 2011

У меня есть служба WCF, скажем, Служба A, которая возвращает имя человека на основе его personId. Получение имени человека из PersonId фактически обслуживается другой службой, скажем -B.

So Service A Идентификатор лица для Service B, который возвращает имя лица.

Теперь я хочу, чтобы служба A вызывала службу B, только если служба B не была вызвана для personId.

Итак, я хочу реализовать кэширование следующим образом:

Кэшируйте комбинацию personid и Person Name, как только мы получим ее из службы B. Также я хочу установить зависимость от времени для каждого отдельного предмета. Если отдельный элемент personId не был доступен с 1 часа, он должен истечь.

Теперь у меня есть два подхода

А) Создать хеш-таблицу personid и personName. Каждый раз, когда есть запрос на PersonID, сначала проверьте, существует ли personId в Хэше. Если он существует, то обслуживайте его из Cache else, позвоните в Сервис B. Если это не так, Позвоните в сервис B. Добавьте комбинацию ID лица и личности человека в Hashtable, а затем поместите эту HashTable в кеш.

Проблема: Как поставить зависимость от отдельного элемента. Установка зависимости от HashTable не решит эту проблему

B) Кэширование отдельных имен Personid и PersonName. Каждый раз, когда есть запрос, проверьте, существует ли PersonId в Cache. Если да, подайте его из Cache, если не позвоните в службу поддержки B.

Проблема: это введет много вещей в кеш. Это создаст проблему?

Какой подход мне выбрать и как?

1 Ответ

0 голосов
/ 21 сентября 2011

Какую структуру кеша вы собираетесь использовать?Взгляните на System.Runtime.Caching из .NET 4 - это должно решить вашу дилемму.Например, вы можете использовать другую сумку для кэширования:

private static ObjectCache personCache = new MemoryCache();

private Person Get(string id)
{
   var p = personCache[id] as Person;
   if (null == p)
   {
        // Make the service call to get the person
        ...
        // add to cache
        personCache.Add(id, p, DateTime.Now.AddMinutes(30));
   }
   return p;
}

Для предыдущих версий .NET вы можете использовать Блок приложения для кэширования .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...