В предыдущей записи в блоге я писал, что в своем проекте мы используем CacheDependency для
динамического обновления кеша в зависимости от изменений в базе данных.
Теперь пишу об этом более подробно.
Итак, CacheDependency позволяет нам устанавливать зависимость между объектом в кеше и строкой в базе данных. Как только строка меняется, обнуляется кеш, идет новый запрос в базу, а в кеш записывается новое значение.Таким образом, мы имеем всегда актуальные данные. При этом данные закешированы, и обновляются только при необходимости.
Так как в своем проекте мы используем SQL Server 2008, то для мониторинга изменений мы будем использовать Service Broker.
Включается он в базе следующим образом:
ALTER DATABASE [База данных] SET ENABLE_BROKER
Тут есть одна сложность. Включить брокер можно только в том случае, если база находится в режиме SINGLE_USER. То есть для рабочего проекта придется отключать пользователей.
Следующим шагом является программное создание зависимостей кеша.
Как видите ничего сложного, а производительность на высоте=)
динамического обновления кеша в зависимости от изменений в базе данных.
Теперь пишу об этом более подробно.
Итак, CacheDependency позволяет нам устанавливать зависимость между объектом в кеше и строкой в базе данных. Как только строка меняется, обнуляется кеш, идет новый запрос в базу, а в кеш записывается новое значение.Таким образом, мы имеем всегда актуальные данные. При этом данные закешированы, и обновляются только при необходимости.
Так как в своем проекте мы используем SQL Server 2008, то для мониторинга изменений мы будем использовать Service Broker.
Включается он в базе следующим образом:
ALTER DATABASE [База данных] SET ENABLE_BROKER
Тут есть одна сложность. Включить брокер можно только в том случае, если база находится в режиме SINGLE_USER. То есть для рабочего проекта придется отключать пользователей.
Следующим шагом является программное создание зависимостей кеша.
SqlConnection conn = null;
try
{
using (conn = new SqlConnection(ConnectionString))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "StoredProcedure";
cmd.CommandType = CommandType.StoredProcedure;
SqlCacheDependency sqlCacheDependency = new SqlCacheDependency(cmd);
conn.Open();
cmd.ExecuteNonQuery();
cache.Insert("CacheKey", (object)value, sqlCacheDependency, (DateTime)absoluteExpiration, Cache.NoSlidingExpiration);
}
}
finally
{
if (conn != null)
{
conn.Close();
}
}
Процедура StoredProcedure (в теле процедуры обычный SELECT) устанавливает связь между нашим объектом и строкой базы данных. А конструктор SqlCacheDependency отвечает за взаимодействие с Service Broker - ом.Как видите ничего сложного, а производительность на высоте=)
Комментарии
Отправить комментарий