WCF Cache: MemoryCache

Используя .NET Framework 4 и выше можно использовать MemoryCache для хранения редко обновляемых данных

Использование совсем простое
  1. Проверяем наличие данных в кэше (MemoryCache.Default["<cache key>"])
  2. Если есть данные - возвращаем результат
  3. Если нет данных - достаём их из БД, например, и кладём в кэш (вернув результат, конечно) 
Пример использования
  1. Создаем новый проект WCF Service Application
  2. Для использования MemoryCache необходимо добавить ссылку на сборку System.Runtime.Caching
  3. Меняем файл IService1.cs

  4. Меняем файл Service1.svc
    1. Обязательно прописываем using System.Runtime.Caching;
    2. Реализуем интерфейс:

  5. Создаём файл WcfMemoryCache.aspx

  6. Краткое описание кода:
    1. Происходит обращение к методу GetDataUseMemoryCache
    2. Метод проверяет - есть ли данные в кэше (строка)
    3. Если есть - возвращает
    4. Иначе - генерирует строку с текущим временем и запоминает в кэше на 4 секунды, возвращая сгенерированную строку
    5. На клиентской стороне (WcfMemoryCache.aspx) javascript ~каждую секунду обращается к сервису и выводит полученные данные в текстовое поле.
      Пример результата работы:
Не стоит забывать
  1. Получение данных для кэширования может быть продолжительной операцией (например из-за сложного запроса к БД или стороннему web-сервису)
    В таком случае может возникнуть повторная попытка добавления кэша в память (по тому же ключу).
    Исключение не возникнет, но метод cache.Add вернёт false. Данные не обновятся.
    Если не нужно дважды выполнять тяжёлые методы по получению данных, предлагаю использовать хотя бы lock, для блокировки критичной секции
  2. Если вы всё же не против выполнять тяжелые методы получения данных для кэша или хотите обновлять его независимо от обращений - можно воспользоваться методом Set, который добавит данные, если их нет и обновит, если они есть
  3. Можно настроить лимиты по использованию

    Подробнее можно прочесть тут http://msdn.microsoft.com/library/dd941874(v=vs.110).aspx

Комментариев нет:

Отправить комментарий

Можете оставить свой комментарий