`
pumaboyd
  • 浏览: 251000 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

系统Cache的批量删除

阅读更多

这里的Cache指的是MS的.NET缓存,我称为OS Cache 或是系统缓存。

OS Cache缓存的批量清空一直是个头疼的问题。举个例子我们根据城市缓存商户信息。也就是说CacheKey = DianPing.Shop.@CityID.@ShopID 那么有时候我们希望清空特定@CityID的商户信息。以前是不好处理的,因为我们不知道,到底有那些CacheKey可以删除(PS:MS没有提供HttpContext.Current.Cache.Items)。

最近自己在处理二级代理的问题时无意中发现 OS Cache 是这样定义的:

public sealed class Cache : IEnumerable

看到了IEnmberable 接口了吗!另人兴奋的接口。以前怎么没注意到呢?有了这个我可以获取到所有的CacheKey啦。以前一直认为的无法获得的CacheKey可以拿到了。有了CacheKey只要调用Cache.Remove(CacheKey)就可以完成清空任务了。那么这里我还需要一些正则表达式的规则,因为需要正则去匹配符合规则的Cachekey。不多说了,看代码:

public static void RemoveByRegex(string pattern)
    {
        IDictionaryEnumerator em = HttpContext.Current.Cache.GetEnumerator();
        Regex regex = new Regex(pattern, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase);
        while (em.MoveNext())
        {
            if (regex.IsMatch(em.Key.ToString()))
            {
                HttpContext.Current.Cache.Remove(em.Key.ToString());
            }
        }
    }

再提供一个清空所有缓存的方法,不用重新上传WebConfig啦.原理是一样的啦!

public static void Clear(string pattern)
   {
       IDictionaryEnumerator em = HttpContext.Current.Cache.GetEnumerator();
       while (em.MoveNext())
       {
           HttpContext.Current.Cache.Remove(em.Key.ToString());
       }
   }

 

(*^__^*),搞定。给我一个正则,我可以清空一片缓存。通过正则表达式批量删除系统缓存的方法完成,一直头疼的问题应该可以解决了。

这里还有几个想到的问题:

  • 批量删除是通过循环去做的,如果一个系统有百万级的KEY,这是有开销的。但反过来想,如果真这么多Key是否是Cache使用不当,有必要这样浪费Key。周一回公司,测试一下我们系统目前大概使用了多少KEY。
  • 想到了敬德在MemCache 中为了解决批量删除,对CacheKey通过SQLDB存储的。不知道MemCache是否有类似的接口。
  • 对Cache的操作是应该有一个类封装了。第一:可以缩短HttpContext.Current.Cache.Add(CacheKey, cityList, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, null); 缓存一个城市列表用了这么长的表达式。第二:可以将我上面的两个方法放入WebCache类中,因为现在没封装,我这两个新方法不知道放哪里!

 

Google 标记: Cache删除, Cache缓存
分享到:
评论

相关推荐

    mybatis postgresql 批量删除操作方法

    MyBatis PostgreSQL 批量删除操作方法 MyBatis 是一个基于 Java 的持久层框架,它提供了一个简单的方式来交互数据库。在本文中,我们将介绍如何使用 MyBatis 实现 PostgreSQL 批量删除操作。 PostgreSQL 简介 ...

    java数据批量处理

    在Java编程领域,数据批量处理是一项常见的任务,尤其在大数据、数据库操作以及系统集成等场景中,批量处理能显著提高效率并减少资源消耗。本文将深入探讨Java如何进行数据批量处理,涉及的主要知识点包括批量读取、...

    alisoft-xplatform-asf-cache-2.5.1.jar

    在实际应用中,alisoft-xplatform-asf-cache-2.5.1.jar提供了丰富的API,支持基本的增删查改操作,如设置、获取、删除和更新缓存项。此外,它还可能包含高级特性,如批量操作、过期策略、数据序列化等,以满足不同...

    Laravel开发-cache

    Laravel的缓存标签功能允许你在一组相关的缓存项上进行操作,比如批量删除。通过`Cache::tags()`方法,你可以为多个缓存条目分配相同的标签,然后使用`Cache::tags()->flush()`清除所有带有该标签的缓存。 ### 缓存...

    Hibernate批量处理数据

    2. **使用SQL进行批量删除**:对于不需要加载到内存中的简单删除操作,可以直接使用SQL进行批量删除。 ```java session.createSQLQuery("DELETE FROM user WHERE id IN (:ids)").setParameterList("ids", ids)....

    Laravel开发-page-cache

    Laravel提供了命令行工具`php artisan cache:clear`来清除所有缓存,或者使用`Cache::forget('key')`来删除特定的缓存项。 **6. 最佳实践** - 对于高访问量且内容相对稳定的页面,如首页、文章列表页,使用Page ...

    cache from command line

    标题中的“cache from command line”指的是通过命令行接口来管理和操作缓存系统。在IT行业中,缓存是一种优化数据访问速度的技术,它存储频繁访问的数据,以减少对主存储器或远程服务器的依赖,从而提高应用程序的...

    redis-cache-mybatis

    9. **性能优化**:为了最大化利用Redis的性能,我们可以采用批量操作、Pipeline或Transaction来减少网络IO开销,同时,合理设计数据结构(如使用Set、Hash等数据类型)也能提高效率。 通过以上步骤,我们可以有效地...

    注册表批量修改权限命令

    枚举在系统下一次启动时所要执行的文件重命名和删除命令的列表。 PipeList 显示系统上的命名管道,包括每个管道的最大实例数和活动实例数。 PortMon 通过高级监视工具监视串行端口和并行端口的活动。它能识别所有的...

    maven仓库清理程序

    这些脚本可能包含命令行指令,如`del`或`rm`(在不同的操作系统中),来定位并删除以".lastupdated"和"_remote.repositories"为后缀的文件。由于编码不同,分别有UTF-8和GBK两种版本,这可能是为了适应不同系统环境...

    Laravel开发-graceful-cache

    在Laravel框架中,缓存是...总之,`graceful-cache`是一个旨在提升Laravel应用缓存性能和管理能力的扩展库,它的优雅设计和功能增强了Laravel的内置缓存系统,使得开发者能更好地应对复杂的缓存需求,优化应用性能。

    Laravel开发-laravel-cache-helper

    2. **批量操作**: 支持批量设置、获取或删除多个缓存项,提高效率。 3. **键生成器**: 自动为缓存生成唯一的、有意义的键,减少键冲突的可能性。 4. **缓存锁**: 提供互斥锁机制,确保并发环境下对同一缓存数据的...

    前端开源库-snapy-cache

    6. **批量操作**:`snapy-cache`还支持批量设置、获取和移除操作,这对于处理大量数据时非常有用。 此外,`snapy-cache`可能还提供了其他高级特性,如自定义存储策略、过期时间设置以及与服务端同步机制等。这些...

    Hibernate批量处理

    批量处理对于需要在短时间内处理大量数据的应用尤其重要,如批量更新、批量插入或批量删除等场景。 #### 二、批量处理的必要性 在实际开发过程中,当需要处理大量数据时,传统的逐条处理方式不仅占用大量的内存...

    通过MemoryCache加载图片

    "通过MemoryCache加载图片"这个话题主要探讨了如何利用内存缓存来优化图片加载过程,从而提高用户体验并减少系统资源的消耗。 MemoryCache,顾名思义,是将数据存储在内存中的一种缓存机制。在Android中,内存缓存...

    TreeSoft数据库管理系统

    功能包括:数据库的展示,库表的展示,表字段结构的展示, SQL语句的在线编辑批量执行,表结构的在线设计维护,数据的在线编辑维护,查询语句保存,SQL语法帮助,在线数据源选择配置等。 系统内置14套UI皮肤,45...

    TADO缓存批量更新

    ADO是微软提供的一种用于访问数据库的组件,它允许开发者通过编程语言与各种数据库管理系统(如SQL Server、Oracle等)进行交互。 批量更新是数据库操作中的一个重要概念,特别是在处理大量数据时,它可以避免频繁...

    PHP实现批量清空删除指定文件夹所有内容的方法

    在PHP编程中,有时我们需要处理文件系统操作,例如批量清空或删除指定文件夹中的所有内容。这通常涉及到遍历目录结构并删除其中的文件和子目录。本文将详细介绍如何使用PHP实现这一功能,并提供一个具体的示例代码。...

Global site tag (gtag.js) - Google Analytics