开始写Enterprise Library 2.0的学习体会,准备先把每个部分的入门部分写好,然后再继续深入的研究每一部分,希望能得到高手的指点和建议。今天写的是Enterprise Library 2.0 中的 Caching Application Block,前面的介绍部分参考了Enterprise Library 2.0 自带的帮助。

一、为什么要使用缓存技术?
当我们构建企业级分布式应用时,设计师和开发者都会面对很多挑战。Caching能够帮助他们克服这其中

的一些困难,包括:
1、性能(Performance):Caching主要是通过尽可能的保存一些有关的数据来提高应用程序的性能,避免了重复的从数据库中存取数据。
2、可变性(Scalability): 利用缓存来存储数据可以有效的节省系统资源,并且能够随着应用程序需求的增加来增加可变性。
3、有效性(Availability):通过将数据存放到本地缓存中,还可以使应用程序在系统发生故障时工作,包括硬件,网络的故障等。

二、在什么情况下使用?
1、当你需要频繁访问静态数据或访问的数据很少发生变化时;
2、对数据的访问,创建或传递需要花费大量时间时;
3、会被经常使用的数据需要进入缓存。

三、缓存可以用在哪些项目中?
1、WinForm
2、Console Application
3、Windows service
4、Com+ Server
5、Web Service
6、ASP.NET Web Applicatio
等等...

当然,我们还应该了解的是每个应用程序都可以使用多个Cache,但不能在不同的应用程序中共享一个Cache。Enterprise Library中的Caching Application Block 的性能已经被高度优化了,并且是线程安全和异常安全的,我们还可以根据自己的需要对它进行扩展。

四、对系统的要求
1.Microsoft Windows 2000, Windows XP Professional, or Windows Server 2003 operating system
2.Microsoft .NET Framework 2.0
3.VS2005

五、初步体验Caching Application Block

下面我们来看一下如何使用Caching Application Block:
首先要添加对Microsoft.Practices.EnterpriseLibrary.Caching的引用。

    [TestMethod]
        public void UseCaching()
        {
            int id = 0;
            string name = "SHY520";
    
        //创建一个缓存管理器
            CacheManager testcaching = CacheFactory.GetCacheManager();
            //添加要进行缓存的数据
            testcaching.Add(id.ToString(), name);
        //取出缓存中的数据
            string rname = (string)testcaching.GetData(id.ToString());

            Assert.AreEqual(name, rname);
        }

相信通过上面的例子,你对Enterprise Library2.0中的Caching Application Block 已经有了一个初步的了解,下面我们来谈谈如何配置Caching Application Block。

六、配置Caching Application Block
       首先打开我们建好的项目,我调试时候用的是一个Test Project,新建一个配置文件App.Config。这个时候我们在项目中选中App.Config右键点击,选择Open With...,如下图:

然后在弹出的Choose Program 对话框中点 add ,并选择我们Enterprise Library2.0安装目录下的Bin目录里的EntLibConfig.exe文件,如下图:

此时打开App.Config文件后出现下图:

然后点击 File --> Save All,这样我们就完成了对Caching Application Block的配置,此时我们发现我们的App.Config文件里多了如下内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="cachingConfiguration" 

type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, 

Microsoft.Practices.EnterpriseLibrary.Caching, Version=2.0.0.0, Culture=neutral, 

PublicKeyToken=null" />
  </configSections>
  <cachingConfiguration defaultCacheManager="Cache Manager">
    <cacheManagers>
      <add expirationPollFrequencyInSeconds="60" 

maximumElementsInCacheBeforeScavenging="1000"
        numberToRemoveWhenScavenging="10" backingStoreName="Null Storage"
        name="Cache Manager" />
    </cacheManagers>
    <backingStores>
      <add encryptionProviderName="" 

type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingS

tore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=2.0.0.0, Culture=neutral, 

PublicKeyToken=null"
        name="Null Storage" />
    </backingStores>
  </cachingConfiguration>
</configuration>

七、Caching Application Block 的简单操作
1.Adding Items to the Cache
       下面的代码中使用了CacheManager的Add方法,它创建了一个String类型的对象并将它存到缓存,缓存时间为10分钟,在这10分钟之类我们可以通过GetData()的方法来取得缓存里所存储的值。

[TestMethod]
        public void UseCaching()
        {
            int id = 0;
            string name = "SHY520";
            
            //创建一个缓存管理器
            CacheManager testcaching = CacheFactory.GetCacheManager();
            //添加要进行缓存的数据,缓存时间为10分钟
            testcaching.Add(id.ToString(), name, CacheItemPriority.Normal, null, new 

SlidingTime(TimeSpan.FromMinutes(10)));
            //取出缓存的数据
            string rname = (string)testcaching.GetData(id.ToString());

            Assert.AreEqual(name, rname);
        }

2.Loading the Cache
         Loading Cache 有两种情况:Proactive loading 和 Reactive loading。
        我理解为是主动缓存和被动缓存,主动缓存是将我们建设的项目中的一些贯穿整个系统都会用到的或是经常用到的数据而有很少改变的数据在程序初始化的时候就从数据库中取出,装入到缓存中,而被动缓存是因为需要响应某个页面或是某一段程序的请求时而将一些必须的数据临时装入缓存。二者各自有着自己的优点和缺点。主动缓存的优点有:1.因为这一类的缓存在应用程序的初始化的时候已经被装入Cache,所以我们在以后的使用中不需要判断它是否存在(当然为保险起见,我还是建议使用缓存前都应该判断一下是否为null);2、由于主动缓存中存放了我们经常需要用到的数据,所以它会使我们的程序的响应速度大大提高。但过多的使用这一类缓存会占用我们系统大量的资源,又会影响系统的运行速度,所以合理使用主动缓存非常重要。被动缓存的优点就是需要的时候才将数据装入缓存,很灵活,也不会占用系统太多资源,缺点正是因为它的灵活让我们搞不清楚它什么时候存在,使用的时候务必先检查它是否存在。

举个例子说吧(也许不是很恰当),我们做MIS系统时,登陆是必不可少的,而且我们一般都是在用户登陆的时候将该用户的一些必要的信息存放到一定的地方,以便后面操作时调用,这个时候我们就可以使用主动缓存。

    [TestMethod]
        public void LoadingCache()
        
            //假设前面已经登陆成功,然后我们获取登陆用户的一些信息
            int id = 100;
            string name = "SHY520";
            string sex = "女";

            Person person = new Person(name, id, sex);
            //将登陆用户信息装入缓存
            CacheManager loginCache = CacheFactory.GetCacheManager();
            loginCache.Add(id.ToString(), person);

            //从缓存中取出登陆用户信息
            //注意强制转换类型
            Person outperson = (Person)loginCache.GetData(id.ToString());

            Assert.AreEqual(outperson.Sex,sex);
            Assert.AreEqual(outperson.Name,name);
            Assert.AreEqual(outperson.Id,id);

        }

3.Flushing the Cache(清空缓存)
将数据装入缓存就必然需要清空缓存,下面将介绍如何清空缓存:

    [TestMethod]
        public void FlushCache()
        {
            string name = "SHY520";
            CacheManager TestFlushCache = CacheFactory.GetCacheManager();
            TestFlushCache.Add("1",name);

            //清空缓存
            TestFlushCache.Flush();

            int i = TestFlushCache.Count;

            Assert.AreEqual(0,i);
        }

4.Removing Items from the Cache
本节中介绍如何移出缓存中的某一项,如下:

    [TestMethod]
        public void RemoveItemOfCache()
        {
            string name = "SHY520";
            CacheManager TestFlushCache = CacheFactory.GetCacheManager();
            TestFlushCache.Add("1", name);

            //从缓存中移出key=1的项
            TestFlushCache.Remove("1");

            int i = TestFlushCache.Count;
            Assert.AreEqual(0,i);
        }

5.Retrieving Items from the Cache
此节介绍如何取的缓存中的某一项的值,需要注意返回值类型的强制转换。

    [TestMethod]
        public void GetDataFromCache()
        {
            string name = "SHY520";
            CacheManager TestFlushCache = CacheFactory.GetCacheManager();
            TestFlushCache.Add("1", name);

            //根据key值得到缓存中的某一项,但取值的时候注意类型的强制转换
            string rname = (string) TestFlushCache.GetData("1");

            Assert.AreEqual(name,rname);
        }

关于Caching Application Block的入门部分就说这么多,希望和正在学习Enterprise Library 2.0 的朋友们多交流,并希望过来人不吝提出建议。

Email:pwei013@163.com

Enterprise Library 2.0 -- Caching Application Block相关推荐

  1. Enterprise Library: Logging and Instrumentation Application Block概述

    Enterprise Library: Logging and Instrumentation Application Block概述<?xml:namespace prefix = o ns ...

  2. 黄聪:Microsoft Enterprise Library 5.0 系列教程(九) Policy Injection Application Block

    代理对象(Proxy Object)会通过Handler链定位到真实对象(Real Object),而Policy则被注入到代理对象和真实对象中.整个流程如图: 我个人对Policy Injectio ...

  3. Microsoft Enterprise Library 简介与请大家下载Microsoft Enterprise Library 5.0体验微软最新技术应用于企业信息平台

    什么是Enterprise Library     Enterprise Library是一组应用程序块(Application Block)的集合.他们是可重用的软件组件,被设计用来帮助开发者面对常 ...

  4. 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级) 本章介绍的是企业库加密应用程序模块 ...

  5. Enterprise Library 3.0 体验(3):使用配置文件的Validation Application Block

    摘要:Enterprise Library 3.0 January 2007 CTP版发布了,这次发布的版对于Validation Application Block有了很大的改进,包括对配置工具的支 ...

  6. Enterprise Library v5.0 -- Data Access Application Block 开发向导(3)

    微软企业库 Enterprise Library 5.0 正式发布!!! Enterprise Library 5.0 开发向导- 简介(1) Enterprise Library v5.0 -- D ...

  7. 黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block

    黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block 原文:黄聪:Microsoft Ent ...

  8. Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级)

    企业库加密应用程序模块提供了2种方式让用户保护自己的数据: Hashingproviders:  离散加密法, 简单来说就是把你的信息保存到内存中后用一个离散值表示并返回给程序,这样在程序中只能看到离 ...

  9. Microsoft Enterprise Library 5.0 系列(二) Cryptography Application Block (初级)

    企业库加密应用程序模块提供了2种方式让用户保护自己的数据: Hashingproviders:  离散加密法, 简单来说就是把你的信息保存到内存中后用一个离散值表示并返回给程序,这样在程序中只能看到离 ...

最新文章

  1. 对于量子计算来说,99%的准确度足够吗?
  2. java springboot b2b2c shop 多用户商城系统源码 (二): 配置管理...
  3. autojs怎么post协议_超9成人都理解错了HTTP中GET与POST的区别
  4. android记账软件开发源代码_如何开发直播软件?直播软件开发的具体流程有哪些?...
  5. 尝试修改源码需要用到git存一下
  6. 2017.7.31.生活记录
  7. 一些自用的编程工具推荐
  8. Linux安装deb安装包命令
  9. 5G如何成为相关行业的创新引擎,提升服务和盈利水平
  10. linux sed命令
  11. 关于计算机分类 按用途可以分为,计算机的分类一般分为
  12. 计算机二级excel高级筛选,Excel 如何按双条件执行高级筛选?
  13. 推荐四款常见的电子教室软件,大家觉得哪款好用
  14. ivew 的offset用法
  15. 图片突出显示(图片高亮显示)-jQuery实现-案例
  16. iOS开发-进阶:被误解的MVC和被神化的MVVM(作者:唐巧)
  17. 最小树形图——朱刘算法学习小记
  18. 微积分小课堂:微积分的发明权之争【微积分发明和完善的过程】
  19. Java错题集(十四)
  20. TIT 数字图像处理 原理与实践(MATLAB) 入门教学 实验一 常用的MATLAB图像处理命令与图像基本操作

热门文章

  1. CSS和JS样式属性对照表
  2. 程序人生之回顾大学前两年----第一篇
  3. 重集合中找出最相近的一个数字
  4. 说说第三方支付接口开发及开发中遇到的坑爹问题
  5. C/C++语言中闭包的探究及比较
  6. asp.net url重写相关技术问题整理
  7. java 数据存储到什么地方?
  8. JVM垃圾回收3——参数详解(转载)
  9. select中option改变时跳转到其他页面
  10. android分析windowManager、window、viewGroup之间关系