Общая модель зависимости для аннулирования элементов кэша
Иллюстрации
Показать всеИзобретение относится к системам, способам и компьютерным программным продуктам для получения пользовательских зависимостей кэша. Техническим результатом является расширение классов зависимости кэша так, чтобы разработчики могли создавать свои собственные (пользовательские) зависимости кэша. Заявленное решение содержит расширяемый базовый класс зависимости кэша, который может использоваться для создания пользовательских классов зависимости кэша в качестве производных от него классов для аннулирования элементов кэша при некотором пользовательском условии. В некоторых вариантах осуществления сервер Web-страниц включает в себя кэш и инфраструктуру, которая включает в себя расширяемый базовый класс зависимости кэша. Раскрыты способы предписания элементу кэша быть зависимым от пользовательской зависимости кэша и для аннулирования элементов кэша на основе пользовательских зависимостей кэша. Например, элементы кэша могут зависеть от и могут быть удалены на основе зависимостей от таблиц базы данных и от Web-услуг. 5 н. и 25 з.п. ф-лы, 4 ил.
Реферат
Область изобретения, к которой относится изобретение
Данное изобретение в общем случае относится к управлению кэшированным контентом (информационно значимым содержимым). Более конкретно, данное изобретение относится к расширению классов зависимости кэша, так чтобы разработчики могли создавать собственные зависимости кэша.
Предшествующий уровень техники
В современных компьютерных системах и сетевых системах кэширование данных является эффективным инструментом для ускорения доставки данных тем, кто их запрашивает. В общем случае, кэширование данных обеспечивает хранение часто запрашиваемых данных в местоположении, откуда данные могут быть быстро извлечены. В одном примере данные, которые хранятся в физической памяти компьютерной системы, могут извлекаться быстрее, чем данные, хранящиеся на жестком диске в компьютерной системе. Это происходит частично из-за того, что жесткие диски обычно имеют большее время задержки на извлечение данных по сравнению с физической памятью. Аналогично, к данным, хранящимся на жестком диске или в памяти в серверной компьютерной системе, можно осуществлять доступ более эффективно, чем к данным, хранящимся в удаленной базе данных. Дополнительно, использование кэшируемых данных может уменьшить количество вычислений, необходимых для генерации контента для доставки на запрашивающую клиентскую компьютерную систему.
Современные сети облегчили возможность широкого перемещения цифровой информации между различными местоположениями. Одним из способов сделать данные доступными для транспортировки является создание статического файла, такого как файл HTML (языка гипертекстовой разметки), который может загружаться с сервера в клиентскую компьютерную систему, где его можно просматривать. Статические файлы могут кэшироваться в различных местах, которые включают в себя серверную компьютерную систему, региональную базу данных, или даже локально в клиентской компьютерной системе. Когда статические файлы компьютерной системы хранятся в клиентской компьютерной системе, извлечение и отображение с помощью клиентской компьютерной системы является, для всех практических целей, мгновенным. Даже когда статические файлы хранятся непосредственно на серверной компьютерной системе, связанной с клиентской компьютерной системой (обычно известно, как кэширование при выводе), извлечение кэшированного контента может происходить относительно быстро. Дополнительно, из-за своего статического характера, статический файл может быть кэширован на длительный период времени, по существу неопределенно долго.
К сожалению, статические файлы не могут включать в себя ни контент реального масштаба времени, ни индивидуально конфигурируемый контент. Часто бывает необходимо предоставить контент, который изменяется периодически или который формируется на основе вычислений или обработки другого контента. Хотя такой контент все равно можно кэшировать, кэшированные значения контента являются действительными только в течение ограниченного промежутка времени. Таким образом, кэш должен обновляться для обеспечения действительности данных.
Одна из технологий, которая помогает Web-разработчикам в создании Web-страниц и сайтов, - это использование скриптов (программ на макроязыке) или модульных частей компьютерной рабочей программы, которые выполняются на сервере Web-страниц, таком как, например, информационный сервер Интернет. Скрипты можно внедрять среди других тэгов (неотображаемых элементов гипертекстовой разметки) HTML для создания Web-страниц, которые являются динамическими и настраиваемыми. Также, как можно вызывать объекты в программах, таких как программы на языках программирования Visual Basic, JavaScript и C#, те же самые объекты можно вызывать в скриптах, которые основаны на этих и других языках.
Класс является объектом в инфраструктуре программирования, такой как инфраструктура ASP.NET. Инфраструктура ASP.NET содержит тысячи классов, которые разработчики Web-страниц могут использовать для разработки Web-страниц. Таким же образом, как обращаются к файлу через каталожный путь, доступ к классам можно осуществлять с помощью обращения к особому пространству имен. Например, обращение к пространству имен System.WinForms.Form обеспечивает указание местоположения определенного класса. Классы могут быть связаны со свойствами, событиями и методами. Свойство можно интерпретировать, как присваивание значения переменной или установки в соответствующем классе (например, x = 5). Событие - это флажок, который активируют при возникновении данного события. Событие может считываться другими классами или другими приложениями для вызова некоторого действия, которое должно быть выполнено. Метод обеспечивает средство для вызова функциональных возможностей соответствующего класса для выполнения некоторого действия (например, вывода данных на устройство отображения). Метод определяет, каким образом функциональные возможности предоставляются внешним компонентам.
Для облегчения кэширования контента и, следовательно, для повышения производительности сервера Web-страниц инфраструктура программирования может включать в себя классы для извлечения данных из различных местоположений, например, из файлов, баз данных и Web-услуг, и классы для управления данными посредством различных операций. В некоторых средах серверная компьютерная система Web-страниц с помощью доступа к этим классам (например, сервер ASP (технология активных страниц сервера)) может создавать и сохранять код HTML, основанный на контенте режима реального времени, который подлежит посылке клиентской компьютерной системе по сценарию кэширования при выводе. В других средах серверная компьютерная система Web-страницы может кэшировать контент, такой как файл расширяемого языка разметки XML, локально в серверной компьютерной системе Web-страниц, так что нет необходимости извлекать или повторно вычислять контент каждый раз, когда требуется Web-страница, которая должна включать в себя этот контент.
Некоторые инфраструктуры программирования позволяют Web-разработчикам создавать такие команды, которые, при их исполнении, вызывают сохранение контента в кэше. Например, для помещения элемента в кэш может выполняться следующая команда: Cach.Insert([ключ], [значение], [зависимость]), где ключ - это ссылочный идентификатор элемента кэша, значение - это значение (или контент), помещаемое в элемент кэша, и зависимость - это необязательный параметр, который определяет, когда значение для данного ключа должно быть удалено из кэша. Зависимость является экземпляром класса, например класса CacheDependency, который может использоваться для предписания значению кэша быть зависимым от возникновения конкретного события.
Некоторые инфраструктуры программирования поддерживают зависимости кэша, которые приводят к зависимости кэшированного значения или от времени, или от файла, или от ключа. Зависимость кэша от времени вызывает удаление элемента, связанного с заданной зависимостью, после истечения заданного периода времени. Например, команда Cache.Insert может быть реализована следующим образом для того, чтобы получить зависимость данных от времени:
Cache.Insert(strCacheKey, dataset, nothing, DateTime.Now.AddMinutes(60), TimeSpan.Zero, CacheItemPriority.High).
Более конкретно, команда DateTime.Now.AddMinutes(60) вызывает удаление элемента в кэше через каждые 60 минут. Использование зависимости кэша от времени, которому задано слишком малое значение, может привести к слишком частой очистке кэша и дополнительным издержкам при частой выборке данных из базы данных или издержкам вычисления данных, которые подлежат сохранению в кэше. Если значение времени установлено слишком большим, то существует риск, что хранящиеся в кэше данные будут недействительными, когда их доставят запрашивающей клиентской компьютерной системе.
Команда Cache.Insert может также использоваться для реализации зависимости кэша от файла, которая приводит к удалению элемента кэша, если имеет место изменение в конкретном файле. Дополнительно, команда Cache.Insert может использоваться для реализации зависимости от ключа, которая вызывает очистку одного или более элементов кэша, когда изменяется некоторое другое хранящееся в памяти значение кэша. Используя зависимость от ключа, изменение одного значения кэша может вызвать удаление из кэша множества зависимых значений кэша.
Хотя три описанные выше зависимости кэша от времени, от файла и от ключа являются полезными для сохранения «свежими» хранящихся в кэше значений, классы, которые реализуют эти зависимости, обычно не допускают расширения. Таким образом, Web-разработчики обычно не имеют возможности предписать элементу кэша быть зависимым от других типов событий. Это препятствует использованию различных других типов зависимостей кэша, которые могут сделать управление кэшем более эффективным. Соответственно, было бы целесообразно создать механизм для расширения типов зависимостей, которые могут использоваться для аннулирования элементов кэша.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
Описанные выше проблемы предшествующего уровня техники преодолеваются с помощью принципов настоящего изобретения, которые ориентированы на способы, системы, компьютерные программные продукты для расширения классов зависимости кэша так, чтобы разработчики могли создавать свои собственные (пользовательские) зависимости кэша. Серверная компьютерная система (которая, например, включает в себя сервер Web-страниц) осуществляет доступ к расширяемому базовому классу зависимости кэша и из расширяемого базового класса зависимости кэша создает в виде производного класса пользовательскую зависимость кэша. Пользовательская зависимость кэша может, например, предписать элементу кэша быть зависимым от изменения в таблице базы данных (например, в таблице SQL (языка структурированных запросов)) или от Web-услуги.
Пользовательская зависимость кэша может включать в себя составную зависимость, например, когда элемент кэша зависит от некоторого количества событий. В некоторых вариантах осуществления функциональные возможности пользовательской зависимости кэша подменяют собой функциональные возможности расширяемого базового класса зависимости кэша. Расширяемый базовый класс зависимости кэша может включать в себя метод уведомления об изменении, относящемся к зависимости, который осуществляет мониторинг события (например, изменения в таблице базы данных), и уведомляет серверную компьютерную систему, когда это событие происходит. Расширяемый базовый класс зависимости кэша может также включать в себя метод освобождения ресурсов при возникновении события зависимости, который освобождает ресурсы, когда элемент кэша удаляют из кэша.
Серверная компьютерная система осуществляет доступ к контенту, например, базы данных или Web-услуги, который нужно доставить клиентской компьютерной системе. Серверная компьютерная система создает элемент кэша, который связывает пользовательскую зависимость кэша с контентом, к которому осуществлен доступ. Серверная компьютерная система помещает элемент кэша в кэш таким образом, чтобы действительность этого элемента кэша (и, таким образом, также контента, к которому осуществлен доступ) зависела от пользовательской зависимости. Серверная компьютерная система может помещать элемент кэша в кэш, используя метод Cache.Insert, который определяет зависимость, которая является экземпляром пользовательской зависимости кэша.
Элемент кэша может быть сделан недействительным (аннулирован), основываясь на пользовательской зависимости кэша. Серверная компьютерная система (которая, например, включает в себя сервер Web-страниц) принимает уведомление о том, что произошло отслеживаемое событие. Данное уведомление может прийти от метода уведомления об изменении, относящемся к зависимости, который был исполнен в результате создания пользовательской зависимости кэша и который следит за возникновением события, связанного с этой пользовательской зависимостью кэша. В ответ на уведомление серверная компьютерная система аннулирует (и удаляет) элемент кэша. Серверная компьютерная система вызывает метод освобождения ресурсов при возникновении события зависимости, освобождая любые ресурсы, используемые данным элементом кэша.
Дополнительные признаки и преимущества данного изобретения будут сформулированы в последующем описании и частично будут очевидны из данного описания, или они могут быть изучены с помощью воплощения данного изобретения на практике. Признаки и преимущества данного изобретения могут быть поняты и получены посредством инструментальных средств и их комбинаций, конкретно указанных в прилагаемой формуле изобретения.
ПЕРЕЧЕНЬ ФИГУР ЧЕРТЕЖЕЙ
Для описания способа, с помощью которого приведенные выше и другие преимущества и признаки данного изобретения могут быть получены, более подробное описание изобретения, кратко описанного выше, будет представлено с помощью ссылки на конкретные варианты его осуществления, которые показаны на прилагаемых чертежах. Следует понимать, что эти чертежи изображают только примерные варианты осуществления изобретения, и поэтому они не должны рассматриваться как ограничивающие его объему, поэтому данное изобретение будет описано и объяснено с дополнительными конкретными специфическими особенностями и подробностями с помощью сопроводительных чертежей, на которых:
Фиг.1 - пример сервера Web-страниц, реализующего создание скриптов на стороне сервера и пользовательские зависимости кэша.
Фиг.2 - пример последовательности операций, иллюстрирующий один из вариантов осуществления способа для предписания элементу кэша быть зависимым от пользовательской зависимости.
Фиг.3 - пример последовательности операций, иллюстрирующий один из вариантов осуществления способа удаления элементов кэша на основе пользовательской зависимости для кэша.
Фиг.4 - схематическое представление соответствующей среды, в которой могут использоваться аспекты настоящего изобретения.
ПОДРОБНОЕ ОПИСАНИЕ ПРЕДПОЧТИТЕЛЬНЫХ ВАРИАНТОВ ОСУЩЕСТВЛЕНИЯ
Настоящее изобретение распространяется на системы, способы и компьютерные программные продукты для расширения классов зависимости кэша таким образом, чтобы пользовательские зависимости кэша могли создаваться разработчиками. Варианты осуществления настоящего изобретения совершенствуют зависимости кэша до расширяемой формы так, чтобы разработчики могли разрабатывать свои собственные пользовательские зависимости кэша. Серверная компьютерная система (которая, например, включает в себя сервер Web-страниц) осуществляет доступ к расширяемому базовому классу CacheDependency, из которого могут быть созданы другие пользовательские классы CacheDependency в качестве производных классов. Пользовательские классы CacheDependency, среди прочего, могут использовать функциональные возможности управления кэшем расширяемого базового класса CacheDependency. Создавая пользовательский класс CacheDependency, который является производным от расширяемого базового класса CacheDependency, от разработчика требуется лишь небольшой объем знаний, если таковые вообще требуются, в отношении того, каким образом реализован расширяемый базовый класс CacheDependency, для использования значимых функциональных возможностей особенностей расширяемого базового класса CacheDependency. Расширяемый базовый класс CacheDependency скрывает от разработчика детали реализации.
Дополнительно, разработчик может осуществлять доступ к методам расширяемого базового класса CacheDependency, которые могут обеспечивать синхронизацию кэша и управление ресурсами кэша. Дополнительно, расширяемый базовый класс CacheDependency может обеспечивать обратную совместимость таким образом, чтобы существующие API (интерфейсы прикладного программирования) могли использоваться с расширяемым базовым классом CacheDependency и любыми классами, производными от него. Примеры таких API включают в себя Cache.Insert, Cache.Add и BasePartialCachingControl.Dependency. Дополнительно, реализация пользовательских зависимостей кэша, полученных из расширяемого базового класса CacheDependency в качестве производных классов, освобождает разработчиков от необходимости определять свойство StartTime для сигнализации о том, когда должен начаться мониторинг кэша. Хотя разработчики могут свободно реализовать это свойство, оно не требуется.
Расширяемый базовый класс CacheDependency включает в себя два дополнительных метода, которые открыты для общего доступа, так что разработчики пользовательских классов CacheDependency могут вызывать функциональные возможности очистки, соответствующие расширяемому базовому классу CacheDependency. Первый метод - это метод NotifyDependencyChanged. Этот метод вызывают классы, которые являются производными от расширяемого базового класса CacheDependency, для информирования расширяемого класса CacheDependency о том, что зависимый элемент изменился. Второй новый метод - это метод DependencyDispose. Этот метод - виртуальный метод, который обеспечивает очистку области памяти, реализуемую специфическим для производного класса образом. Более конкретно, этот метод обеспечивает область памяти для команд, которые обычно располагались в методе освобождения ресурсов расширяемого базового класса CacheDependency, а не для пользовательского класса CacheDependency. Таким образом ресурсы, используемые пользовательским классом CacheDependency, могут освобождаться для использования другими модулями, имеющими потребность в доступе к этим ресурсам.
Способ NotifyDependencyChanged может быть вызван пользовательским классом CacheDependency, который зависит от расширяемого базового класса CacheDependency. Пользовательский класс CacheDependency может таким образом предписывать элементу кэша быть зависимым от изменений в базе данных, от данных Web-услуги или от любой другой причины. Таким путем кэш может распознавать ключ недействительного элемента кэша и удалять данный ключ (и соответствующий контент) из кэша.
В одном иллюстративном примере разработчик создает пользовательский класс “SqlCacheDependency”, который является производным от расширяемого базового класса CachDependency, для опроса базы данных SQL с целью определения того, были ли сделаны изменения в этой базе данных. SqlCacheDependency является производным от расширяемого базового класса CacheDependency, который существует в пределах инфраструктуры программирования. Таким образом, класс SqlCacheDependency может вызывать метод NotifyDependencyChanged таким образом, чтобы серверная компьютерная система удаляла зависимый элемент кэша.
Используя один из вариантов осуществления изобретения, экземпляр пользовательского класса CacheDependency может быть реализован, используя следующие команды:
10 If (Cache [“Product”] == null {
20 SqlConnection Connection = new SqlConnection ([детали соединения]);
30 SqlDataAdapter ds = new SqlDataAdapter (“Product_GetProducts”, connection);
…
40 SqlCacheDependency dep = new SqlCacheDependency (“NorthWind”, “Products”);
50 Cache.Insert(“Product”, ds, dep);
}
В строке 10 приведенной выше программы проверяют, находится ли элемент «Product» в кэше. Если элемент не находится в кэше, то выполняют функции в операторе «если». В строке 20 устанавливают соединение с базой данных, откуда контент должен извлекаться. В строке 30 извлекают данные из базы данных, используя метод «Product_GetProducts», и сохраняют данные в переменной «ds». В строке 40 переменную «dep» назначают в качестве зависимости от таблицы «Products» в базе данных «NorthWind». Эта зависимость является экземпляром пользовательского класса CacheDependcy, который является производным от расширяемого базового класса CacheDependency. Затем в строке 50 выполняют размещение данных переменной «ds» в элементе кэша, на который ссылается ключ «Product», так чтобы этот элемент кэша зависел от «dep».
В этом примере SqlCacheDependency является пользовательской зависимостью кэша, являющейся производным классом от расширяемого базового класса CacheDependency.
Когда класс, являющийся производным от расширяемого базового класса CacheDependency, используется в качестве зависимости, серверная компьютерная система обрабатывает этот класс так, как будто он является экземпляром расширяемого класса CacheDependency. Соответственно, серверная компьютерная система способна реагировать на режимы поведения, аналогичные режимам поведения, характерным для расширяемого базового класса CacheDependency, хотя внутренним образом производный класс может реализовывать свои собственные уникальные функциональные возможности, такие как уведомление, когда запрос к базе данных изменяет ее. Пользовательский класс CacheDependency, в этом случае SqlCacheDependency, подменяет любые методы расширяемого базового класса CacheDependency, необходимые для достижения требуемых функциональных возможностей. В этом примере, когда SqlCacheDependency уведомляют об изменении базы данных при запросе к ней, он вызывает метод base.Notify.DependencyChanged, который приводит к удалению серверной компьютерной системой элемента кэша, на который ссылается ключ «Product».
Хотя этот пример был описан в терминах зависимости от изменения базы данных, важно помнить, что возможности расширения расширяемого базового класса CacheDependency позволяют создавать фактически любую зависимость кэша, которая может быть задумана Web-разработчиком. С помощью расширяемой модели Web-разработчик может создавать любую пользовательскую зависимость, которая включает в себя составные зависимости, основанные на двух или больше зависимостях. Например, элемент кэша может зависеть и от файла, и от таблицы SQL. Следующие команды показывают реализацию составной зависимости.
70 if (Cache [“Product-List”] == null {
80 SqlConnection Connection = new SqlConnection ([детали соединения]);
90 SqlDataAdapter ds = new SqlDataAdapter (“Product_GetProducts”, connection);
100 SqlCacheDependency sqlDep = new SqlCacheDependency (“NorthWind”, “Products”);
120 CachDependency dep = new AggregateCacheDependency(Server.MapPath(“sales.xml”), sqlDep);
130 Cache.Insert(“Product-List, ds, dep);
}
Этот код подобен коду приведенных выше строк 10-50, за исключением строки 120. Составную зависимость кэша реализуют с помощью производного класса CachDependency с именем AggregateCacheDependency. Он может использоваться для предписания элементам кэша быть зависимыми и от файла (sales.xml), и от пользовательского класса SqlCacheDependency, который является производимым от расширяемого базового класса CacheDependency. Классы, являющиеся производными от расширяемого базового класса CacheDependency, могут также обеспечивать дополнительные пользовательские функциональные возможности. Т.е. производный класс может быть разработан для обеспечения любых событий, методов и свойств, которые используются для реализации пользовательских функциональных возможностей. Например, производный класс может быть разработан для времени начала (например, задания времени, когда CacheDependency должен начать мониторинг изменений), способности поддерживать объединение зависимостей, поддержки механизмов обратного вызова и т.д. Соответственно, разработчик не ограничен событиями, методами и свойствами, присущими расширяемому базовому классу CacheDependency.
На фиг.1 показана соответствующая среда, в которой могут применяться аспекты настоящего изобретения. Фиг.1 изображает сервер 100 и клиент 102, соединенные с сетью с помощью соответствующих линий 121 и 122 связи, соответственно. Сервер 100 и клиент 102 могут осуществлять связь через сеть 104, используя разнообразие протоколов, которые включают в себя протокол передачи гипертекста (HTTP). Сервер 100 может быть сервером ASP.NET, таким что он может доставлять клиенту 102 динамический контент в форме динамических Web-страниц. Сервер включает в себя различные классы и модули, которые включают в себя расширяемый класс 106 CacheDependency и пользовательский класс 114 CacheDependency. Сервер 100 также включает в себя кэш 110, который может быть расположен в физической памяти сервера 100 или в любом другом удобном местоположении.
Сервер 100 соединен с базой данных 112 с помощью линии 123 связи. Базой данных 112 может быть любая соответствующая база данных, такая как, например, база данных SQL или база данных Oracle. В других вариантах осуществления изобретения база данных 112 может представлять услугу XML или любой другой источник данных.
Как показано, клиент 102 запрашивает некоторый контент от сервера 100. Например, клиент 102 может обращаться к URL (унифицированному указателю информационного ресурса), тем самым запрашивая Web-страницу от сервера 100. Сервер 100 проверяет кэш 110 для определения того, находится ли запрашиваемый контент (например, данные Web-страницы) в кэше 110. Если контент не находится в кэше 110, то модуль 108 интерфейса базы данных может запросить контент из базы данных 112. При соответствии запросу контент, такой как, например, контент 132, извлекают возвращают модулю 108 интерфейса базы данных.
Альтернативно, запрашиваемый контент может быть некоторым расчетным значением или результатом некоторой обработки контента, извлеченного из некоторой базы данных, такой как база данных 112. Допустимо, что модуль 108 интерфейса базы данных вычисляет или обрабатывает контент надлежащим образом. Затем контент посылают клиенту 102, например, в одном или более сообщениях HTTP. Контент может также быть добавлен в кэш 110, используя метод Cache.Insert. Метод Cache.Insert задает пользовательскую зависимость, определяемую пользовательским классом 114 CacheDependency, который является производным от расширяемого базового класса 106 CacheDependency.
Пока контент остается в кэше 110, его можно более эффективно доставить любому клиенту, запрашивающему этот контент. Контент остается в кэше 110 до тех пор, пока метод, такой как метод NotifyDependencyChanged, не будет вызван пользовательским классом 114 CacheDependency. Данный контент удаляют из кэша при вызове метода NotifyDependencyChanged. Для последующих запросов клиента в отношении контента потребуется, чтобы этот контент был повторно извлечен из базы данных 112 и/или повторно рассчитано модулем 108 интерфейса базы данных.
Пользовательский класс 114 CacheDependency может вызывать очистку кэша 110, когда имеет место изменение в базе данных 112. В этом примере, хотя извлечение данных из базы данных 112 может быть ресурсоемким, опрос базы данных 112 на предмет изменений, с другой стороны, использует меньше ресурсов. База данных 112 может содержать таблицы базы данных, которые хранят информацию в базе данных 112, такие как таблица 116 базы данных. Другая таблица 117 базы данных может дополнительно содержать флаговый элемент 118, который служит индикатором того, были ли сделаны изменения в информации в таблице 116 базы данных. Таблица 117 базы данных может содержать флажки для других таблиц в базе данных, которые имеют пользовательские зависимости. В одном из вариантов осуществления флаговый элемент 118 может быть инкрементным так, что каждое изменение в таблице 116 базы данных вызывает инкрементное приращение значения флагового элемента 118. Пользовательский класс 114 CacheDependency может быть спроектирован для удаления элементов кэша, когда обнаружено увеличение флагового элемента 118.
На Фиг.2 показана последовательность операций, иллюстрирующая способ размещения элемента кэша, который имеет зависимость. Способ по фиг.2 включает в себя этап осуществления доступа к расширяемому базовому классу CacheDependency (этап 202). Этап 202 может включать в себя осуществление доступа серверной компьютерной системы к расширяемому базовому классу CacheDependency. Например, сервер 100 может осуществлять доступ к расширяемому классу 106 CacheDependency. Сервер 100 может осуществлять доступ к классу 106 CacheDependency в результате выполнения команд, разработанных разработчиком Web-страниц, другим разработчиком программного обеспечения или как часть некоторого модуля программы.
Способ на фиг.2 включает в себя создание пользовательского класса CacheDependency в качестве производного класса от расширяемого базового класса CacheDependency (действие 204). Действие 204 может включать в себя создание серверной компьютерной системой пользовательского класса CacheDependency в качестве производного класса от расширяемого базового класса CacheDependency. Например, сервер 100 может создавать пользовательскую зависимость 114 кэша в качестве производного класса от расширяемого класса 106 CacheDependency. Сервер 100 может создать пользовательскую зависимость 114 кэша в качестве производного класса от в результате выполнения команд, разработанных разработчиком Web-страниц, разработчиком программного обеспечения или как часть некоторого модуля программы, для создания пользовательского класса CacheDependency. Сервер 100 может также создать пользовательскую зависимость 114 кэша в качестве производного класса от из множества источников, которые включают в себя, но не в ограничительном смысле, внешний датчик, связанный с компьютером, такой как термометр, который вызывает событие всякий раз, когда условия изменяются; программа спортивного табло, которая вызывает изменение всякий раз, когда счет в игре изменяется; программа управления сетью, которая вызывает событие всякий раз, когда конфигурация сети изменяется (например, когда компьютер добавляют или удаляют из сети); и программа каталога, которая вызывает событие всякий раз, когда изменяется каталог (например, когда индивидуума добавляют или удаляют).
Способ по фиг.2 включает в себя осуществление доступа к контенту (действие 206). Действие 206 может включать в себя осуществление серверной компьютерной системой доступа к контенту, который должен быть включен в Web-страницу для доставки на клиентскую компьютерную систему. Например, сервер 100 может осуществлять доступ к контенту, который должен быть включен в Web-страницу, для доставки клиенту 102. Осуществление доступа к контенту может включать в себя создание или обработку этого контента. Доступ к контенту можно осуществить из разнообразных отличающихся местоположений, например, из баз данных и Web-услуг. Например, сервер может осуществлять доступ к данным, хранящимся в базе данных 112. Модуль 108 интерфейса базы данных или другие подходящие модули могут соответствующим образом форматировать данные для включения их в Web-страницу.
Способ по фиг.2 включает в себя действие по созданию элемента кэша, который связан с пользовательским классом CacheDependency (действие 208). Действие 208 может включать в себя создание серверной компьютерной системой элемента кэша, который связан с пользовательским классом CacheDependency. Например, сервер 100 может создавать элемент кэша, который связан с пользовательской зависимостью 114 кэша. Элемент кэша создают в одном варианте осуществления с помощью оператора описания переменной, выполняемого сервером 100 (например, таким как строка 50 из описанных выше команд).
Способ по фиг.2 включает в себя действие по размещению элемента кэша в кэше (действие 210). Действие 210 может включать в себя размещение серверной компьютерной системой элемента кэша в области кэша в серверной компьютерной системе. Например, сервер 100 может помещать элемент кэша в кэш 100. Элемент кэша может быть помещен в кэш таким образом, чтобы действительность элемента кэша (и, таким образом, также кэшированного контента) зависела от пользовательской зависимости. Например, сервер 100 может помещать в кэш 110 элемент кэша, который зависит от зависимости, которая следует из пользовательской зависимости 114 кэша.
На фиг.3 показан способ аннулирования элемента кэша, используя пользовательский класс CacheDependency. Способ по фиг.3 включает в себя действие по мониторингу условий пользовательской зависимости, задаваемых экземпляром пользовательской зависимости кэша (этап 302). Действие 302 может включать в себя осуществляемый серверной компьютерной системой мониторинг условий пользовательской зависимости, задаваемых экземпляром пользовательского класса CacheDependency, реализованного в серверной компьютерной системе. Например, сервер 100 может осуществлять мониторинг условий пользовательской зависимости, заданных экземпляром пользовательского класса 114 CacheDependency. Условием пользовательской зависимости может быть возникновение события, такого как, например, изменение контента базы данных или контента, обеспечиваемого Web-услугой. Например, сервер 100 может отслеживать флаговую элемент 118 для определения изменений в содержимом таблицы 116 базы данных. Когда пользовательский класс 114 CacheDependency связан с составной зависимостью, то может осуществляться мониторинг множества условий пользовательской зависимости.
Способ по фиг.3 включает в себя действие по определению того, выполнено ли условие пользовательской зависимости (действие 304). Действие 304 может включать в себя определение серверной компьютерной системой выполнения условия пользовательской зависимости, связанного с пользовательской зависимостью кэша. Например, сервер 100 может определять, выполнено ли условие пользовательской зависимости, связанное с пользовательским классом 114 CacheDependency. Когда пользовательский класс 114 CacheDependency связан с составной зависимостью, сервер 100 может определять, выполнено ли каждое из условий пользовательской зависимости в множестве условий пользовательской зависимости.
В некоторых вариантах осуществления сервер 100 определяет, выполнено ли условие пользовательской зависимости, сравнивая сохраненный флаговый элемент с существующим флаговым элементом. Например, сервер 100 может сравнивать предварительно извлеченное и сохраненное значение для флагового элемента 118 с текущим значением для флагового элемента 118. Когда флаговый элемент 118 получает приращение, пользовательский класс 114 CacheDependency может сравнивать флаговый элемент 118, находящийся в текущий момент времени в таблице 117 базы данных, с флаговым элементом, который существовал в таблице 117 базы данных в некоторое предыдущее время. Если флаговый элемент 118, находящийся в текущий момент времени в таблице, больше, чем флаговый элемент, который существовал в таблице 117 базы данных в некоторое предыдущее время, то выполнено условие пользовательской зависимости (изменение в содержимом таблицы 116 базы данных).
Когда условие пользовательской зависимости не выполнено («нет» на этапе 304), сервер 100 может снова осуществлять мониторинг условий пользовательской зависимости. Мониторинг в отношении условий пользовательской зависимости может повторяться через заданные интервалы (например, каждые 5 секунд), пока условие или условия пользовательской зависимости не будут выполнены, например, пока не произойдет отслеживаемое событие («да» на действии 304).
Способ по фиг.3 включает в себя действие по индикации того, что условия пользовательской зависимости выполнены (действие 306). Действие 306 может включать в себя метод NotifyDependencyChanged, указывающий серверной компьютерной системе на то, что условия пользовательской зависимости выполнены. Например, метод NotifyDependencyChanged для пользовательского класса 114 CachDependency может уведомлять сервер 100, когда изменилось содержимое таблицы 116 базы данных. Уведомление о том, что условие пользовательской зависимости выполнено, может указывать серверу 100 на то, что элемент кэша должен быть удален.
Способ по фиг.3 включает в себя очистку кэша (действие 308). Действие 308 может включать в себя удаление серверной компьютерной системой элемента кэша в серверной компьютерной системе. Например, сервер 100 может удалить элемент кэша из кэша 110. Элемент кэша может быть удален в ответ на прием уведомления о том, что условия пользовательской зависимости, связанные с пользовательской зависимостью кэша, выполнены. Например, сервер 100 может удалить элемент кэша, зависящий от таблицы 116 базы данных, в ответ на прием уведомления о том, что флаговый элемент 118 был увеличен. Когда элемент кэша удален, компьютерная система 100 может освободить некоторые ресурсы (например, системную память), которые использовались для поддержания данного элемента кэша. Например, серверная компьютерная система 100 может вызывать метод DependencyDispose, связанный с пользовательским классом 114 CachDependency, для освобождения ресурсов для того элемента кэша, который хранил содержимое таблицы 116 базы данных.
Варианты осуществления настоящего изобретения могут содержать компьютер специального или общего назначения, который включает в себя различные компьютерные аппаратные средства, как обсуждается более подробно ниже. Варианты осуществления в рамках объема настоящего изобретения также включают в себя машиночитаемые носители для переноса или хранения машиноисполняемых команд или структур данных, хранящихся на них. Такие машиночитаемые носители могут быть любыми доступными носителями, к которым компьютер общего или специального назначения может осуществить доступ. Для примера, а не в качестве ограничения, такие машиночитаемые но