В настоящее время я изучаю интеграцию кэширования AppFabirc в моем приложении .net С# и ищу некоторые примеры кода. Есть ли какие-либо примеры с открытым исходным кодом или кодом, доступные из кэширования AppFabric, которые я могу посмотреть?
Примеры кэширования AppFabric с использованием С#
Ответ 1
Операции с кешем
Первым объектом, созданным при работе с кэшированием AppFabric, является DataCacheFactory
. Это может быть создано либо с жестко закодированными данными конфигурации, которые сообщают factory, как связаться с кеш-сервером, либо без конфигурации, и в этом случае он считывает конфигурацию из вашего файла web.config/app.config. Моя рекомендация заключается в том, что вы сохраняете свою конфигурационную информацию в вашем файле .config, иначе, когда вы хотите что-то изменить в настройке вашего кеша, вам нужно будет перекомпилировать и повторно распространить ваше приложение. Важно помнить о DataCacheFactory, это очень сложно создать - вы определенно не хотите создавать одну из них для каждой операции кеша. Рассмотрите возможность использования шаблона Singleton - см. этот вопрос для более подробной информации.
// Create a factory reading the config info from the .config file
DataCacheFactory factory = new DataCacheFactory();
Основной интерфейс к кешу - через объект Cache
. Кэш получен из метода DataCacheFactory GetCache
, передавая имя кеша:
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, но есть еще много возможностей для работы с concurrency!
Здесь можно загрузить учебный комплект для Windows Server AppFabric , в нем есть раздел, посвященный кэширование. Продолжайте следить за тегом appfabric здесь, так как я уверен, что со временем будет еще много примеров кода, решающих проблемы для людей.
Ответ 2
Также стоит добавить, что шаблон Singleton очень важен, если вы используете сервис кэширования Azure AppFabric, поскольку каждое создание DataCacheFactory создает новое соединение с сервисом кеширования Azure AppFabric. Поскольку количество подключений ограничено в зависимости от размера вашего кеша (кеш объемом 128 МБ включает в себя 5 подключений), вы очень быстро блокируете все свои соединения, если вы не будете повторно использовать один и тот же factory!