Примеры кэширования AppFabric с использованием С#

В настоящее время я изучаю интеграцию кэширования AppFabirc в мое приложение .net С# и ищу некоторые примеры такого кода. Есть ли какие-либо образцы кода с открытым исходным кодом или доступные вне кэширования AppFabric, на которые я могу взглянуть?


person amateur    schedule 19.01.2011    source источник
comment
Есть ли какой-либо аспект кэширования AppFabric, для которого вы хотели бы увидеть демонстрационный код?   -  person PhilPursglove    schedule 20.01.2011
comment
Основные операции, такие как добавление, удаление, получение из кеша. Некоторые примеры, использующие это, были бы полезны, а также общая настройка appfabric в коде С#.   -  person amateur    schedule 20.01.2011
comment
Существует ZIP-загрузка с несколькими образцами, доступными в Microsoft, просто погуглите.   -  person JensG    schedule 22.10.2013


Ответы (2)


Операции с кэшем
Первый объект, который необходимо создать при работе с кэшированием AppFabric, — это DataCacheFactory. Это может быть создано либо с жестко закодированными данными конфигурации, которые сообщают фабрике, как связаться с сервером кеша, либо без конфигурации, и в этом случае она считывает конфигурацию из вашего файла web.config/app.config. Я рекомендую хранить информацию о конфигурации в файле .config, в противном случае, если вы захотите что-то изменить в настройке кэша, вам потребуется повторно скомпилировать и повторно распространить свое приложение. Важно помнить о DataCacheFactory: его создание дорого — определенно не стоит создавать один из них для каждой операции кэширования. Рассмотрите возможность использования шаблона Singleton — см. этот вопрос для получения дополнительной информации. .

// Create a factory reading the config info from the .config file
DataCacheFactory factory = new DataCacheFactory();

Основной интерфейс к кешу осуществляется через объект Cache. Кэш получается из метода GetCache DataCacheFactory, передавая имя кеша:

DataCache myCache = factory.GetCache("myCache");

Добавление элемента в кэш
Каждый элемент в кэше имеет ключ, представляющий собой строку. Ключ должен быть уникальным для кеша — если вы передадите уже существующий ключ, вы получите исключение. Кэшируемый элемент должен быть сериализуемым, чтобы AppFabric могла внутренне передавать его по серверам в кэше. На самом базовом уровне элементы добавляются в кеш с помощью метода Add.

object myCachedItem = new Object();
string myCachedItemKey = "MyCacheKey";
myCache.Add(myCachedItemKey, myCachedItem);

Удаление элемента из кэша

myCache.Remove(myCachedItemKey);

Просто как.

Получение элемента из кеша
При получении элемента из кеша мы используем шаблон без кеша. Это означает, что мы смотрим в кеш, чтобы увидеть, есть ли там нужный элемент (используя ключ). Если элемент находится в кеше, мы берем кешированный элемент (потенциально приводя его к другому типу); в противном случае мы предпримем шаги, чтобы получить товар с нуля, например. чтение из базы данных, а затем кеширование, чтобы в следующий раз оно было у нас.

object cachedObject;
string myImportantDataKey = "MyImportantDataTable";
DataTable myImportantData;

// This is an object because everything is returned from the cache as an object
cachedObject = myCache.Get(myImportantDataKey);
// Check to see if we got something from the cache
if (cachedObject == null)
{
    // The requested item wasn't in the cache - a cache miss
    // Go get the data from the db
    myImportantData = getMyImportantDataFromMyDatabase();

    // Add the item to the cache so we've got it for next time
    myCache.Add(myImportantDataKey, myImportantData);
}
else
{
    // We have the cached object so cast it to a DataTable
    myImportantData = (DataTable)cachedObject;
}

Обновление элемента в кэше

// Put can be used to update an existing item in the cache
// If the item does not exist then it functions like Add
myCache.Put(myImportantDataKey, myUpdatedImportantData);

Это основные операции CRUD, но есть еще много чего, что вы можете использовать для работы с параллелизмом!


Учебный комплект Windows Server AppFabric можно загрузить здесь есть раздел о кэшировании. Продолжайте следить за тегом appfabric здесь, так как я уверен, что со временем появится гораздо больше примеров кода, решающих проблемы для людей.

person PhilPursglove    schedule 20.01.2011
comment
Интересно, безопасен ли этот шаблон, например. может ли один сервер обнаружить, что ключ отсутствует, попытаться добавить запись, а затем потерпеть неудачу, потому что другой сервер уже создает запись, готовясь к добавлению записи. - person redcalx; 06.12.2012
comment
@locster Это обоснованная критика этого кода, хотя в моей (ограниченной) защите он предназначен как демонстрационный код, а не как производственный. Это также легко решить, когда вы начинаете смотреть на механизмы параллелизма; одна из отличных функций AppFabric заключается в том, что вы можете GetAndLock элементы, которые в настоящее время не существуют в кеше. Таким образом, сервер 1 видит, что элемент не существует, поэтому он блокирует его, готовясь к вызову базы данных. Сервер 2 видит, что элемент не существует, пытается GetAndLock его и терпит неудачу, потому что сервер 1 уже имеет блокировку. См. tinyurl.com/c5t6w45. - person PhilPursglove; 06.12.2012

Также стоит добавить, что шаблон Singleton очень важен, если вы используете службу кэширования Azure AppFabric, поскольку каждое создание DataCacheFactory создает новое подключение к службе кэширования Azure AppFabric. Поскольку количество подключений ограничено в зависимости от размера вашего кеша (128 МБ кеша включает 5 подключений), вы очень быстро заблокируете все свои подключения, если не будете повторно использовать одну и ту же фабрику!

person Matt Quinn    schedule 15.09.2011
comment
Кэш 128 МБ теперь включает 10 подключений. - person Lee Smith; 12.10.2011