zoukankan      html  css  js  c++  java
  • Enterprise Library 4.1学习笔记4缓存应用程序块

    缓存是个啥?以及为啥要用缓存就不废话了,主要是从实用角度讲下怎么用

    1.先添加对Microsoft.Practices.EnterpriseLibrary.Caching.dll的引用

    2.修改web.config文件,注意高度部分

    <configSections>
        ...
        <section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral" />
     ...

    </configSections>
      <cachingConfiguration defaultCacheManager="Cache Manager">
        <cacheManagers>
          <add expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="1000"
            numberToRemoveWhenScavenging="10" backingStoreName="Null Storage"
            type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral"
            name="Cache Manager" />
        </cacheManagers>
        <backingStores>
          <add encryptionProviderName="" type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.1.0.0, Culture=neutral"
            name="Null Storage" />
        </backingStores>
      </cachingConfiguration>
    ...

    3.使用缓存,见下面的代码,关键地方都加了注释

    using System;
    using System.Collections.Generic;
    using Microsoft.Practices.EnterpriseLibrary.Caching;
    using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;

    namespace CacheTest
    {
        
    /// <summary>
        
    /// 定义要缓存的实体类
        
    /// </summary>
        public class MyData
        {
            
    public string Name { setget; }
            
    public int Age { setget; }
            
    public string Color { setget; }
        }

        
    public partial class _Default : System.Web.UI.Page
        {
            
    const string KEYNAME = "myDate";//缓存的键值

            ICacheManager cacheManager;

            
    protected void Page_Load(object sender, EventArgs e)
            {
                cacheManager 
    = CacheFactory.GetCacheManager();//实例化ICachemanager
            }

            
    protected void btnWrite_Click(object sender, EventArgs e)
            {
                
    //生成要缓存的数据(实际开发中可以是从数据库查询出来的数据)
                List<MyData> _list = new List<MyData>
                    
    new MyData(){ Age=1, Color="Yellow", Name="China"},
                    
    new MyData{ Age=2,Color="Black",Name="USA"}
                };

                AbsoluteTime _ExpireTime 
    = new AbsoluteTime(DateTime.Now.AddSeconds(30));//指定30秒后过期

                cacheManager.Add(KEYNAME, _list, CacheItemPriority.Normal, 
    null, _ExpireTime);//加入缓存


                Response.Write(
    "Cache写入完成," + DateTime.Now.ToString());
            }

            
    protected void btnRead_Click(object sender, EventArgs e)
            {

                
    this.R1.DataSource = GetCacheData();
                
    this.R1.DataBind();
                Response.Write(
    "Cache加载完成," + DateTime.Now.ToString());

            }

            
    /// <summary>
            
    /// 获取缓存数据
            
    /// </summary>
            
    /// <returns></returns>
            public List<MyData> GetCacheData()
            {
                List
    <MyData> _cacheData = cacheManager.GetData(KEYNAME) as List<MyData>;

                
    if (null == _cacheData)//记得一定要加此判断(因为缓存可能过期)
                {
                    
    //如果缓存数据为空,则重新生成数据,并加入缓存(为检测效果,特地把Color与Name前加了一个"New")
                    _cacheData = new List<MyData>
                    
    new MyData(){ Age=1, Color="New Yellow", Name="New China"},
                    
    new MyData{ Age=2,Color="New Black",Name="New USA"}
                    };

                    AbsoluteTime _ExpireTime 
    = new AbsoluteTime(DateTime.Now.AddSeconds(30));//指定30秒后过期

                    cacheManager.Add(KEYNAME, _cacheData, CacheItemPriority.Normal, 
    null, _ExpireTime);
                }

                
    return _cacheData;
            }



        }
    }
    前端页面很简单
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CacheTest._Default" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        
    <title></title>
    </head>
    <body>
        
    <form id="form1" runat="server">
        
    <asp:Button ID="btnWrite" runat="server" Text="Write Cache" OnClick="btnWrite_Click" />
        
    <asp:Button ID="btnRead" runat="server" Text="Load Cache" 
            onclick
    ="btnRead_Click" />
        
    <asp:Repeater ID="R1" runat="server" EnableViewState="false">
            
    <HeaderTemplate>
                
    <ul>
            
    </HeaderTemplate>
            
    <ItemTemplate>
                
    <li>Age:<%Eval("Age"%>,Name:<%Eval("Name")%>,Color:<%Eval("Color")%></li>
            
    </ItemTemplate>
            
    <FooterTemplate>
                
    </ul>
            
    </FooterTemplate>
        
    </asp:Repeater>
        
    </form>
    </body>
    </html>

    值得一提的是,缓存是"全局"性质的,也就是说在一个页面写入了缓存,另一个页面也可以读取(当然:前提是缓存未过期的情况下),我们可以利用这个特性把网站中经常使用的数据(比如一些基础数据)缓存起来,其它要用的地方直接从缓存读取,能有效减少对数据库的访问。
    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    CQUOJ 10819 MUH and House of Cards
    CQUOJ 9920 Ladder
    CQUOJ 9906 Little Girl and Maximum XOR
    CQUOJ 10672 Kolya and Tandem Repeat
    CQUOJ 9711 Primes on Interval
    指针试水
    Another test
    Test
    二分图匹配的重要概念以及匈牙利算法
    二分图最大匹配
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1492009.html
Copyright © 2011-2022 走看看