Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Удалить элементы кеша по префиксу ключа / 4 сообщений из 4, страница 1 из 1
02.11.2006, 14:56
    #34101153
Аноним
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить элементы кеша по префиксу ключа
Всем привет,

Как можно удалить из кеша все елементы, которые начинатся с заданного префикса?

Можно ли
то сделать так чтобы не перечислять все их?

Спасибо.
...
Рейтинг: 0 / 0
03.11.2006, 10:54
    #34103187
Аноним
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить элементы кеша по префиксу ключа
А>Как можно удалить из кеша все елементы, которые начинатся с заданного префикса?

Только так смог сделать, ничего получше не придумал:



public static void InvalidateUserRoles(string userId)
{
    Cache cache = HttpContext.Current.Cache;

    // If no user id defined - remove roles of all users of all privileges
    if (userId == null)
    {
        StringCollection keysList = new StringCollection();

        // Get all the keys from the cache to remove
        foreach (DictionaryEntry entry in cache)
        {
            string k = entry.Key as string;
            if (k != null && IsUesrRoleCacheKey(k))
                keysList.Add(k);
        }

        // Remove all the keys from cache
        foreach (string rolesKey in keysList)
            cache.Remove(rolesKey);

    }
    else
    {
        string key = GetUserRolesCacheKey(userId);
        cache.Remove(key);
    }
}
...
Рейтинг: 0 / 0
06.11.2006, 18:27
    #34107514
luk_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить элементы кеша по префиксу ключа
Здравствуйте, Аноним, Вы писали:

А>Всем привет,

А>Как можно удалить из кеша все елементы, которые начинатся с заданного префикса?

А>Можно ли
А>то сделать так чтобы не перечислять все их?

А>Спасибо.



/*protected*/
        public static Cache Cache
        {
            get { return HttpContext.Current.Cache; }
        }

/*protected*/
        public static void PurgeCacheItems(string prefix)
        {
            prefix = prefix.ToLower();
            List<string> itemsToRemove = new List<string>();

            IDictionaryEnumerator enumerator = BizObject.Cache.GetEnumerator();
            while (enumerator.MoveNext())
            {
                if (enumerator.Key.ToString().ToLower().StartsWith(prefix))
                    itemsToRemove.Add(enumerator.Key.ToString());
            }

            foreach (string itemToRemove in itemsToRemove)
                BizObject.Cache.Remove(itemToRemove);
        }

......
PurgeCacheItems("Products_ProdTitles");
PurgeCacheItems("Products_Product_" + id.ToString());
...
Рейтинг: 0 / 0
07.11.2006, 12:54
    #34108856
ShekhovtsovS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить элементы кеша по префиксу ключа
Здравствуйте, Аноним, Вы писали:

А>Всем привет,

А>Как можно удалить из кеша все елементы, которые начинатся с заданного префикса?

А>Можно ли
А>то сделать так чтобы не перечислять все их?

А>Спасибо.

Когда добавляешь объекты с таким префиксом в кэш, можно дать им в качестве CacheDependency какой нибудь файл clearcachefactor.txt. положи его куда нибудь подальше чтоб его никто не трогал, сделай readonly. а когда нужно очистить кэш от объектов с этими префиксами, просто пересохрани его или создай заново.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Удалить элементы кеша по префиксу ключа / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]