System.Web.Caching.Cache删除某键后,希望同时触发其它动作(关键时刻,还是事件靠的住)

简介:

System.Web.Caching.Cache是.net为我们提供的一个轻量级的缓存组件,它提供了最基础的增,增过期,删除,获取等操作,下面是对Cache进行的一个封装,方便以后统一调用和扩展。

/// <summary>
    /// 缓o存?相à关?的?操ù作÷类à
    /// 占?占?
    /// </summary>
    public class DataCache
    {
        /// <summary>
        /// 获?取?当±前°应|用?程ì序ò指?定¨CacheKey的?Cache值μ
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <returns></returns>
        public static object GetCache(string CacheKey)
        {
            System.Web.Caching.Cache objCache = HttpRuntime.Cache;
            return objCache[CacheKey];

        }
        /// <summary>
        /// 设è置?当±前°应|用?程ì序ò指?定¨CacheKey的?Cache值μ
        /// 调÷用?:oDataCache.SetCache("name", "zzl");
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <param name="objObject"></param>
        public static void SetCache(string CacheKey, object objObject)
        {
            System.Web.Caching.Cache objCache = HttpRuntime.Cache;
            objCache.Insert(CacheKey, objObject);
        }

        /// <summary>
        /// 设è置?当±前°应|用?程ì序ò指?定¨CacheKey的?Cache值μ
        /// 调÷用?:oDataCache.SetCache("name", "zzl", DateTime.Now.AddMinutes(1), TimeSpan.Zero);
        /// </summary>
        /// <param name="CacheKey"></param>
        /// <param name="objObject"></param>
        public static void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration)
        {
            System.Web.Caching.Cache objCache = HttpRuntime.Cache;
            objCache.Insert(CacheKey, objObject, null, absoluteExpiration, slidingExpiration);
        }

        /// <summary>
        /// 移?除y指?定¨Cache
        /// </summary>
        /// <param name="CacheKey"></param>
        public static void RemoveCache(string CacheKey)
        {
            System.Web.Caching.Cache objCache = HttpRuntime.Cache;
            objCache.Remove(CacheKey);

        }

        #region Events
        /// <summary>
        /// 缓o存?删?除y事?件t
        /// </summary>
        public static event CacheEventHandler CacheDeleted;
        #endregion

        #region Methods
        /// <summary>
        /// 触¥发¢缓o存?删?除y事?件t
        /// </summary>
        public static void OnCacheDeleted(string key)
        {
            if ((CacheDeleted != null))
            {
                CacheDeleted(null, new CacheEventArgs(key));
            }

           Remove(key);

        }
        #endregion
    }

    #region Delegates
    /// <summary>
    /// 缓o存?委ˉ托D
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    public delegate void CacheEventHandler(object sender, CacheEventArgs e);
    #endregion

    /// <summary>
    /// 缓o存?事?件t源′
    /// </summary>
    public class CacheEventArgs
    {
        public CacheEventArgs()
        {

        }
        public CacheEventArgs(string cacheKey)
        {
            this.CacheKey = cacheKey;
        }
        public string CacheKey { get; set; }
    }

在这个类中,有一个关于删除键时的事件,它的作用是在删除某个键时,进行与它关联的其它操作,例如:在用户登出时,希望将它的cache记录清除,并删除一些记录性的操作,但记录性的操作是不固定的,为了为破坏程序的完整性,我们可以在登出时,先去将其需要的操作进行有订阅,如果以后有其它删除cache键需要的关联操作,只要订阅就可以了

代码如下:

static CommonMethod()
       {
           iUserRepository = new UserRepository();
           //订?阅?了?CacheDeleted这a个?事?件t,?当±它ü被?触¥发¢时±,?将?自?动ˉ执′行D被?绑ó定¨的?方?法¨
           DataCache.CacheDeleted += new CacheEventHandler(ClearUserRecord);
           DataCache.CacheDeleted += new CacheEventHandler(ClearProductRecord);
       }
    #region 删?除yCache后ó,?需è要a做?的?其?它ü事?情é
        static void ClearUserRecord(object sender, CacheEventArgs e)
        {
            DataCache.SetCache("msg1", e.CacheKey + "被?删?除y了?");
        }


        static void ClearProductRecord(object sender, CacheEventArgs e)
        {
            DataCache.SetCache("msg2", e.CacheKey + "真?的?被?删?除y了?");
        }
        #endregion

在登出操作后,可以去触发删除cache键的操作:

 

public static ActionResult UserLogOutModule(Controller controller)
       {
           string returnUrl = controller.Request.QueryString["returnUrl"];
           Standard.ClientHelper.UserLogout();

  DataCache.OnCacheDeleted("name");

本文转自博客园张占岭(仓储大叔)的博客,原文链接:System.Web.Caching.Cache删除某键后,希望同时触发其它动作(关键时刻,还是事件靠的住),如需转载请自行联系原博主。

目录
相关文章
|
4月前
|
前端开发 开发者 安全
JSF表单处理大揭秘:数据绑定与事件处理,如何让Web应用更加智能?
【8月更文挑战第31天】在现代Web应用开发中,JSF(JavaServer Faces)框架因强大的表单处理能力而广泛应用。其数据绑定机制可实现表单控件与后端模型的双向传输,降低前后端耦合度,提高代码维护性和类型安全性。事件处理机制则支持丰富的内置与自定义事件,进一步增强应用灵活性。本文通过示例代码展示这些特性,帮助开发者更好地利用JSF构建高效、灵活的Web应用。然而,JSF也存在组件库较小和学习成本较高等局限,需根据具体需求权衡使用。
54 0
|
4月前
|
前端开发 JavaScript 开发者
掌握Web前端事件处理精髓:从事件冒泡到事件委托,轻松优化你的交互体验与代码性能!
【8月更文挑战第23天】在Web前端开发中,事件处理是实现用户交互的关键机制。其中,事件冒泡与事件委托是优化页面性能、简化代码的重要手段。事件冒泡是指事件从触发它的元素开始,沿着DOM树向上逐层传播至根节点的过程。通过阻止事件冒泡,可以控制事件的影响范围。而事件委托则是利用事件冒泡特性,在父元素上设置监听器来响应子元素的事件,这种方法减少了监听器的设置数量,特别适用于动态添加的子元素,提高了代码的可维护性和性能。掌握这两种技术,能帮助开发者构建更高效、更简洁的应用程序。
60 0
|
7月前
|
JavaScript 前端开发 C++
【Web 前端】JavaScript window.onload 事件和 jQuery ready 函数有何不同?
【5月更文挑战第2天】【Web 前端】JavaScript window.onload 事件和 jQuery ready 函数有何不同?
|
7月前
|
JavaScript 前端开发 开发者
在Web开发中,事件处理是一个至关重要的概念
【5月更文挑战第17天】Vue.js的事件处理是其核心特性之一,允许开发者响应用户操作。通过v-on(或@)指令绑定DOM事件到方法,实现交互。事件修饰符如.stop、.prevent等简化处理逻辑。此外,Vue支持自定义事件,便于组件间通信,如子组件通过$emit触发事件,父组件使用v-on监听并响应。理解这些机制能帮助开发者更有效地管理Vue应用的事件流程。
55 0
|
7月前
|
存储 前端开发 JavaScript
【亮剑】在Web开发中,滚动事件(onScroll)是一个常见且强大的交互手段。
【4月更文挑战第30天】在React中,利用`onScroll`事件可实现无限滚动、动态加载和视差效果。通过`componentDidMount`和`componentWillUnmount`(类组件)或`useEffect`(函数组件)添加/移除滚动监听器。为了优化性能,需注意节流、防抖、虚拟滚动和避免同步计算。实战案例展示了如何结合Intersection Observer实现无限滚动列表,当最后一个帖子进入视口时加载更多数据。关注性能,确保应用流畅。
131 0
|
7月前
|
JavaScript 前端开发 API
「深入探究Web页面生命周期:DOMContentLoaded、load、beforeunload和unload事件」
在 Web 开发中,了解页面生命周期是非常重要的。页面生命周期定义了页面从加载到卸载的整个过程,包括各种事件和阶段。在本文中,我们将详细介绍四个关键事件:DOMContentLoaded、load、beforeunload 和 unload。我们将探讨这些事件的属性、API、应用场景,并提供一些代码示例和参考资料。
|
小程序 前端开发 开发者
微信小程序web-view上覆盖原生组件,解决cover-view点击事件无法触发问题
微信小程序web-view上覆盖原生组件,解决cover-view点击事件无法触发问题
274 0
|
JavaScript 前端开发 UED
事件处理(Event Handling):构建交互性Web应用的基石
在现代Web应用开发中,交互性是吸引用户的重要因素之一。而事件处理是实现这种交互性的关键。通过响应用户的操作,您可以创造出令人愉悦的用户体验。在本博客中,我们将深入探讨事件处理的概念、不同类型的事件、事件绑定、事件冒泡以及如何有效地使用事件处理来构建交互性强大的Web应用。
206 0
|
存储 JavaScript 前端开发
web前端面试高频考点——Vue3.x升级的重要功能(emits属性、生命周期、多事件、Fragment、移出.async、异步组件写法、移出 filter、Teleport、Suspense...)
web前端面试高频考点——Vue3.x升级的重要功能(emits属性、生命周期、多事件、Fragment、移出.async、异步组件写法、移出 filter、Teleport、Suspense...)
252 0