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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    你加班太多是因为你的代码写的烂
    构建知识图谱,让自己更值钱
    程序员的年终总结该怎么写?
    一本开源的程序员快速成长秘笈
    vue项目框架搭建
    mysql的那点事儿,你知道吗
    idea快速返回上次代码查看的位置
    ajax、axios和fetch的区别
    java8 stream的用法总结
    正则表达式
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1492009.html
Copyright © 2011-2022 走看看