AppFabric Cache 'Design' - кеширование отдельных предметов или коллекций? - PullRequest
5 голосов
/ 17 ноября 2010

Мы находимся в процессе масштабирования одного из наших веб-приложений с одного сервера на веб-ферму.В настоящее время приложение использует Http-кэш времени выполнения для кэширования справочных данных для приложения.Данные «похожи» на каталог продуктов:

  • категории (т.е. список)
  • продукты (т.е. список)

Поскольку данные обновляются оченьнечасто мы также предварительно вычисляем некоторые поиски

  • ProductsByCategory (т. е. словарь)

В настоящее время коллекции кэшируются как целые объекты ... т.е. весь список / словарьэто получить и положить.Коллекции обычно используются так, как мне обычно требуется для заполнения выпадающих списков / списков / и т. Д.

Справочные данные необходимо синхронизировать между серверами в ферме.Введите AppFabric ...

  1. Подходит ли наша вышеупомянутая модель кэширования для кэширования AppFabric?Примеры, с которыми я сталкивался, по-видимому, помещают отдельный элемент в кэш, а не целые коллекции (с «регионами», используемыми для массовых операций get)

  2. Каков наилучший способ, есливообще, чтобы справочные данные обновлялись «вместе» ... т.е. если обновляются категории, мне нужны обновленные продукты, чтобы отражать последние категории.

Ответы [ 2 ]

2 голосов
/ 21 ноября 2010

Поддержка операции типа «массовый пут» в настоящий момент немного ограничена (читай: не существует). Но небольшая мысль предполагает, что это, вероятно, правильно - если вы бросите коллекцию объектов в кеш, она не будет знать, как дать им значимые ключи или теги (которых больше в данный момент). Вы можете подделать его с помощью метода расширения, который принимает коллекцию объектов и просматривает, возможно, свойство Name или Id для каждого объекта, чтобы поместить объекты в кэш, но под прикрытием все равно будет сводиться помещать объекты в кэш по одному.

Для получения набора объектов из кэша, однако, есть еще один вариант метода GetObjectsInRegion(regionname). Если в тот момент, когда объект помещается в кэш, вы добавляете к нему тег, например, для продукта пометьте его категорией, позже вы можете вернуть все объекты для определенного тега с помощью метода GetObjectsByTag. Самое замечательное (я думаю) использование тегов заключается в том, что вы можете поместить любое количество их на объект в кеше, например. для продукта вы можете пометить его категорией, а также поставщиком и, скажем, ценовым диапазоном. Это дает вам гораздо больше гибкости в том, как вы можете запрашивать свои кэшированные элементы - вы можете делать запросы по любому отдельному тегу или выполнять запросы И / ИЛИ с помощью методов GetObjectsByAllTags / GetObjectsByAnyTag.

1 голос
/ 27 апреля 2011

Наткнулся на эту же проблему сам.Использовать локальный кэш, использовать отдельные объекты в регионе и использовать обратные вызовы уведомлений на уровне региона

...