В настоящее время я изучаю интеграцию кэширования AppFabirc в мое приложение .net С# и ищу некоторые примеры такого кода. Есть ли какие-либо образцы кода с открытым исходным кодом или доступные вне кэширования AppFabric, на которые я могу взглянуть?
Примеры кэширования AppFabric с использованием С#
Ответы (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 здесь, так как я уверен, что со временем появится гораздо больше примеров кода, решающих проблемы для людей.
GetAndLock
элементы, которые в настоящее время не существуют в кеше. Таким образом, сервер 1 видит, что элемент не существует, поэтому он блокирует его, готовясь к вызову базы данных. Сервер 2 видит, что элемент не существует, пытается GetAndLock
его и терпит неудачу, потому что сервер 1 уже имеет блокировку. См. tinyurl.com/c5t6w45.
- person PhilPursglove; 06.12.2012
Также стоит добавить, что шаблон Singleton очень важен, если вы используете службу кэширования Azure AppFabric, поскольку каждое создание DataCacheFactory создает новое подключение к службе кэширования Azure AppFabric. Поскольку количество подключений ограничено в зависимости от размера вашего кеша (128 МБ кеша включает 5 подключений), вы очень быстро заблокируете все свои подключения, если не будете повторно использовать одну и ту же фабрику!