C#中使用Cache框架快速实现Cache操作

.NET 4.0中新增了一个System.Runtime.Caching的名字空间,它提供了一系列可扩展的Cache框架,本文就简单的介绍一下如何使用它给程序添加Cache。

一个Cache框架主要包括三个部分:ObjectCache、CacheItemPolicy、ChangeMonitor。

  • ObjectCache表示一个CachePool,它提供了Cache对象的添加、获取、更新等接口,是Cache框架的主体。它是一个抽象类,并且系统给了一个常用的实现——MemoryCache。
  • CacheItemPolicy则表示Cache过期策略,例如保存一定时间后过期。它也经常和ChangeMonitor一起使用,以实现更复杂的策略。
  • ChangeMonitor则主要负责CachePool对象的状态维护,判断对象是否需要更新。它也是一个抽象类,系统也提供了几个常见的实现:CacheEntryChangeMonitor、FileChangeMonitor、HostFileChangeMonitor、SqlChangeMonitor。

如下是一个简单的示例:

    class MyCachePool
    {
        ObjectCache cache = MemoryCache.Default;
        const string CacheKey = "TestCacheKey";

        public string GetValue()
        {
            var content = cache[CacheKey] as string;
            if(content == null)
            {
                Console.WriteLine("Get New Item");

                var policy = new CacheItemPolicy() { AbsoluteExpiration = DateTime.Now.AddSeconds(3) };
                content = Guid.NewGuid().ToString();
                cache.Set(CacheKey, content, policy);
            }
            else
            {
                Console.WriteLine("Get cached item");
            }

            return content;
        }

        public static void Test()
        {
            var cachePool = new MyCachePool();
            while (true)
            {
                Thread.Sleep(1000);
                var value = cachePool.GetValue();
                Console.WriteLine(value);
                Console.WriteLine();

            }
        }
    }

这个例子创建了一个保存3秒钟Cache:三秒钟内获取到的是同一个值,超过3秒钟后,数据过期,更新Cache,获取到新的值。

过期策略:

从前面的例子中我们可以看到,将一个Cache对象加入CachePool中的时候,同时加入了一个CacheItemPolicy对象,它实现着对Cache对象超期的控制。例如前面的例子中,我们设置超时策略的方式是:AbsoluteExpiration = DateTime.Now.AddSeconds(3)。它表示的是一个绝对时间过期,当超过3秒钟后,Cache内容就会过期。

除此之外,我们还有一种比较常见的超期策略:按访问频度决定超期。例如,如果我们设置如下超期策略:SlidingExpiration = TimeSpan.FromSeconds(3)。它表示当对象3秒钟内没有得到访问时,就会过期。相对的,如果对象一直被访问,则不会过期。这两个策略并不能同时使用。

CacheItemPolicy也可以制定UpdateCallback和RemovedCallback,方便我们记日志或执行一些处理操作,非常方便。

ChangeMonitor

虽然前面列举的过期策略是非常常用的策略,能满足我们大多数时候的需求。但是有的时候,过期策略并不能简单的按照时间来判断。例如,我Cache的内容是从一个文本文件中读取的,此时过期的条件则是文件内容是否发生变化:当文件没有发生变更时,直接返回Cache内容,当问及发生变更时,Cache内容超期,需要重新读取文件。这个时候就需要用到ChangeMonitor来实现更为高级的超期判断了。

由于系统已经提供了文件变化的ChangeMonitor——HostFileChangeMonitor,这里就不用自己实现了,直接使用即可。

    public string GetValue()
    {
        var content = cache[CacheKey] as string;
        if(content == null)
        {
            Console.WriteLine("Get New Item");

            var file = @"r:\test.txt";
            CacheItemPolicy policy = new CacheItemPolicy();
            policy.ChangeMonitors.Add(new HostFileChangeMonitor(new List<string> { file }));

            content = File.ReadAllText(file);
            cache.Set(CacheKey, content, policy);
        }
        else
        {
            Console.WriteLine("Get cached item");
        }

        return content;
    }

这个例子还是比较简单的,对于那些没有自定义的策略,则需要我们实现自己的ChangeMonitor,现在一时也想不到合适的例子,下次有时间在写篇文章更深入的介绍一下吧。

到此这篇关于C#使用Cache框架实现Cache操作的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Asp.Net Cache缓存使用代码

    复制代码 代码如下: public DataSet createCache() { //返回DataSet DataSet ds=new DataSet(); OleDbConnection conn=new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source="+Server.MapPath("data.mdb")); conn.Open(); string sql="select

  • C# Cache缓存读取的设置方法

    先创建一个CacheHelper.cs类,代码如下: using System; using System.Web; using System.Collections; using System.Web.Caching;    public class CacheHelper {     /// <summary>     /// 获取数据缓存     /// </summary>     /// <param name="cacheKey">键&l

  • .net如何使用Cache框架给程序添加Cache

    NET 4.0中新增了一个System.Runtime.Caching的名字空间,它提供了一系列可扩展的Cache框架,本文就简单的介绍一下如何使用它给程序添加Cache. 一个Cache框架主要包括三个部分:ObjectCache.CacheItemPolicy.ChangeMonitor. ObjectCache表示一个CachePool,它提供了Cache对象的添加.获取.更新等接口,是Cache框架的主体.它是一个抽象类,并且系统给了一个常用的实现--MemoryCache. Cache

  • ASP.NET中的Cache使用介绍

    Cache 即高速缓存 ,我想非常多人对他的第一印象一定像我相同,感觉他一定能提高系统得性能和运行速度.的确.Net推出cache的初衷确实是这样的.那么cache是怎么提高系统性能和运行速度呢?是不是在所有情况下用cache都能提高性能?是不是cache用的越多就越好呢?我在近期研发的项目中有所体会,写下来当作总结也希望能跟大家一起探讨探讨,有错误的地方希望大家批评指正. 1.Cache 是怎么工作的 Cache 是分配在服务器上的一个公共的内存片. 所谓公共指的cache只要一创建是所有一个

  • ASP.NET Cache的一些总结分享

    1.1.1 摘要 最近我们的系统面临着严峻性能瓶颈问题,这是由于访问量增加,客户端在同一时间请求增加,这迫使我们要从两个方面解决这一问题,增加硬件和提高系统的性能. 大家可以通过各种各样的方法去优化我们系统,本篇博文将介绍通过Cache方法来优化系统的性能,减轻系统的负担. 1.1.2 正文 不同位置的缓存 在Web应用程序中的使用缓存位置主要有:客户端浏览器缓存.客户端和服务器中以及服务器端,因此缓存可以分为以下几类: 客户端缓存(Client Caching) 代理缓存(Proxy Cach

  • Asp.Net中Cache操作类实例详解

    本文以一个Asp.Net的Cache操作类实例代码来详细描述了cache缓存的结构及实现方法,完整代码如下所示: /// <head> /// <function> /// 存储类(存储UserInfo信息) /// </function> /// <description> /// 用Cache存储用户信息 /// 在指定间隔(TimeOut)内取,则可以从Cache中取, /// 如果超出存储时间,则从数据库取用户信息数据 /// 作為所有用户信息的存儲

  • .net清空所有Cache的实现代码

    复制代码 代码如下: IDictionaryEnumerator CacheEnum = Cache.GetEnumerator(); while (CacheEnum.MoveNext()) { Cache.Remove(CacheEnum.Key.ToString()); } Response.Write("缓存清空成功");

  • C#中使用Cache框架快速实现Cache操作

    .NET 4.0中新增了一个System.Runtime.Caching的名字空间,它提供了一系列可扩展的Cache框架,本文就简单的介绍一下如何使用它给程序添加Cache. 一个Cache框架主要包括三个部分:ObjectCache.CacheItemPolicy.ChangeMonitor. ObjectCache表示一个CachePool,它提供了Cache对象的添加.获取.更新等接口,是Cache框架的主体.它是一个抽象类,并且系统给了一个常用的实现——MemoryCache. Cach

  • JavaWeb工程中集成YMP框架快速上手(二)

    本文将介绍如何在Java Web工程中集成YMP框架,操作过程基于IntelliJ IDEA做为开发环境,工程结构采用Maven构建: IntelliJ IDEA下载地址: https://www.jetbrains.com/idea/download/ Maven下载地址: http://maven.apache.org/ 创建项目 1. 打开IDEA开发环境并点击Create New Project按钮开始创建新项目向导,如下图-1所示: 2. 在New Project窗口中选中左侧Mave

  • JavaWeb工程中集成YMP框架快速上手

    了解YMP框架 YMP于2014年10月25日正式发布1.0版本,在此之前就已在实际项目中得到广泛使用,从最初仅限团队内部使用,到合作伙伴的开发团队,再到身边的朋友,和朋友的朋友们也开始将YMP投入到实际项目中去,所以在这里我要向一直以来帮助.支持我的这些同事.朋友们表示衷心的感谢!是大家的信赖和对它的认可,才使得YMP快速成长起来,在变化过程中它一直在不断的改进.优化直至最终对外发布. 没有完美的框架,只有适合的才是好的,为了让YMP更简单易用,从2015年1月26日正在开始了v2版本的开发,

  • 深入理解Spring Cache框架

    本文是缓存系列第三篇,前两篇分别介绍了 Guava 和 JetCache. 前两篇我们讲了 Guava 和 JetCache,它们都是缓存的具体实现,今天给大家分析一下 Spring 框架本身对这些缓存具体实现的支持和融合.使用 Spring Cache 将大大的减少我们的Spring项目中缓存使用的复杂度,提高代码可读性.本文将从以下几个方面来认识Spring Cache框架. 背景 SpringCache 产生的背景其实与Spring产生的背景有点类似.由于 Java EE 系统框架臃肿.低

  • Spring框架学习之Cache抽象详解

    目录 1.简介 cache和buffer 2.缓存抽象 3.spring缓存抽象与多进程 官方文档  8.0 Spring为不同缓存做了一层抽象,这里通过阅读文档以及源码会对使用以及原理做一些学习笔记. 1.简介 从3.1版开始,Spring Framework提供了对现有Spring应用程序透明地添加缓存的支持. 与事务支持类似,缓存抽象允许一致地使用各种缓存解决方案,而对代码的影响最小. 从Spring 4.1开始,通过JSR-107注释和更多自定义选项的支持,缓存抽象得到了显着改进. ca

  • 详解SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)

    引言 ​前两天在写一个实时数据处理的项目,项目要求是 1s 要处理掉 1k 的数据,这时候显然光靠查数据库是不行的,技术选型的时候老大跟我提了一下使用 Layering-Cache 这个开源项目来做缓存框架. ​之间问了一下身边的小伙伴,似乎对这块了解不多.一般也就用用 Redis 来缓存,应该是很少用多级缓存框架来专门性的管理缓存吧. ​趁着这个机会,我多了解了一些关于 SpringBoot 中缓存的相关技术,于是有了这篇文章! 在项目性能需求比较高时,就不能单单依赖数据库访问来获取数据了,必

  • Spring Cache框架应用介绍

    目录 介绍 常用注解 实际测试 介绍 Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能. Spring Cache提供了一层抽象,底层可以切换不同的cache实现.具体就是通过CacheManager接口来统一不同的缓存技术. CacheManager是Spring提供的各种缓存技术抽象接口. 针对不同的缓存技术需要实现不同的CacheManager: CacheManager 描述 EhCacheCacheManager 使用EhCache

  • Android中使用开源框架Citypickerview实现省市区三级联动选择

    1.概述 记得之前做商城项目,需要在地址选择中实现省市区三级联动,方便用户快速的填写地址,当时使用的是一个叫做android-wheel 的开源控件,当时感觉非常好用,唯一麻烦的是需要自己整理并解析省市区的xml文件,思路很简单,但是代码量相对大了些.偶然期间发现了另外一个开源组件,也就是今天要介绍的citypickerview. github地址:crazyandcoder/citypicker 2. 实现效果 下面给大家演示下实现效果: 3.   实现方法 (1)添加依赖 dependenc

  • Springboot中集成Swagger2框架的方法

    摘要:在项目开发中,往往期望做到前后端分离,也就是后端开发人员往往需要输出大量的服务接口,接口的提供方无论是是Java还是PHP等语言,往往会要花费一定的精力去写接口文档,比如A接口的地址.需要传递参数情况.返回值的JSON数据格式以及每一个字段说明.当然还要考虑HTTP请求头.请求内容等信息.随着项目的进度快速高速的迭代,后端输出的接口往往会面临修改.修复等问题,那也意味着接口文档也要进行相应的调整.接口文档的维护度以及可读性就大大下降. 既然接口文档需要花费精力去维护,还要适当的进行面对面交

随机推荐