- Хроники. - http://usanov.net -

Статический флаг для сброса ASP.NET cache.

Posted By Ikutsin On 20 апреля 2012 @ 13:13 In .NET C#,HTML, AJAX, JS & CSS | Comments Disabled

[1]Кэш это полезная штука, позволяющая сгладить изъяны реализации сложных выборок из базы или неоптимизированных расчетов. Шучу, в таких случаях лучше обратится с специалисту, чтобы сделать рефакторинг или переписать часть кода. Все-же остается масса сценариев, где лучше «перевести часть памяти но счет производительности». Сегодня я бы хотел поделится своим велосипедом с возможностью использования флага для очистки определенных ключей кэша. Он реализован на основе CacheDependency.

Вообщем, из коробки (не считая AggregateCacheDependency) есть только 2 CacheDependency [2] — на основе файлов и на основе запроса SQL. В своих целях, я бы мог использовать последний, но лишний запрос и дополнительные настройки отбили аппетит. Так что я сделал свой. Основная идея — заставить очистится все ключи с помощью одно вызова статического метода. Переидем к коду:


public class StaticFlushCacheDependency : CacheDependency

{

    protected static event EventHandler FlushEvent;

    public static void FlushDependencies(object sender)

    {

        if (FlushEvent != null) FlushEvent(sender, EventArgs.Empty);

    }

    protected void FlushEventHandler(object sender, EventArgs e)

    {

        NotifyDependencyChanged(sender, e);

    }

    public StaticFlushCacheDependency()

    {

        FlushEvent += FlushEventHandler;

    }

    protected override void DependencyDispose()

    {

        FlushEvent -= FlushEventHandler;

        base.DependencyDispose();

    }

}

Основную роль тут играет статический ивент, который и говорит всем слушателям очистить свой кэш.

Использовать его можно обычным способом:


//добавить улюч с зависимостью на наш метод

Cache.Add(cacheKey, cacheObject, new StaticFlushCacheDependency(), DateTime.MaxValue, TimeSpan.FromMinutes(5), CacheItemPriority.Normal, null);

//очистить кэш

StaticFlushCacheDependency.FlushDependencies(new object());


Article printed from Хроники.: http://usanov.net

URL to article: http://usanov.net/2347-staticheskij-flag-dlya-sbrosa-asp-net-cache

URLs in this post:

[1] Image: http://usanov.net/wp-content/uploads/2012/04/cache.jpg

[2] CacheDependency: http://msdn.microsoft.com/ru-ru/library/system.web.caching.cachedependency.aspx

Copyright © 2008 Все, что меня окружает. All rights reserved.