zoukankan      html  css  js  c++  java
  • 【转】系统缓存全解析二:动态缓存(3)-文件,对象缓存依赖与数据库缓存依赖

    (依据文件,数据库,表等变化而自动更新缓存内容)


    一,缓存文件:


          
    简单语言介绍以下,将硬盘中的文本文件缓存至web服务器内存中,一般常用在缓存配置文件或其他公共文件上,并自动监听文件是否有被修改,一旦被修改,将自动的更新缓存。因为与下面的数据库缓存依赖基本代码一致,所以不加代码示例。


    二,缓存非序列化对象或者序列化对象:


    不用多说,就是将对象放入缓存内啦。


    三,数据库缓存依赖项:


    为了实现.NET缓存依赖需要调用System.Web.Caching下的三个类:


    1,Cache类 ;//将数据缓存到该对象内;


    2,SqlCacheDependency类;//主要负责为Cache对象 与 数据库表或结果集合建立关系的类


    3,SqlCacheDependencyAdmin类;//可忽略不用,以后总结


    以及System.Data.SqlClient下的两个类:


    1,System.Data.SqlClient.SqlDependency   //开启或关闭对于数据库的监听


    以及开启MSSQL内某一数据库的消息传递服务:


               alter database Common set enable_broker  
    //开启


               alter database Common set disable_broker //关闭



    下面是详细的。NET针对MSSQL缓存依赖项的例程:


    using System;
    using System.Collections.Generic;
    using
    System.Linq;
    using System.Text;
    using System.Web.Caching;
    using
    System.Collections;
    using System.Data.SqlClient;
    using
    System.Data;
    using System.Xml;
    using
    System.Collections.ObjectModel;
    using System.Web;


    namespace HOSoft.Herp4.AutoTest.Common.Data
    {
        public sealed
    class CacheProvider<T>
        {
            #region 全局变量
            public
    static Cache HerpCache = HttpRuntime.Cache;
            public static
    CacheItemRemovedCallback Callback = new
    CacheItemRemovedCallback(CacheProvider<T>.RemovedItemCallBack);
           
    public static TimeSpan timespan;
            #endregion
           
           
    //#region 静态构造函数
            //static CacheProvider()
            //{
           
    //    HerpCache = new Cache();
            //}
           
    //#endregion



            public static void StartSqlDependency(Collection<string>
    StrConnection)
            {
               
                if
    (StrConnection.Count > 0)
                {
                    foreach (string
    str in StrConnection)
                    {
                       
    SqlDependency.Start(str);
                    }
                }
            }



            public static void StopSqlDependency(Collection<string>
    StrConnection)
            {
                if (StrConnection.Count >
    0)
                {
                    foreach (string str in
    StrConnection)
                    {
                       
    SqlDependency.Stop(str);
                    }
                   
               
    }
            }



            public static SqlCacheDependency
    CreateSqlCacheDependency(SqlCommand Sqlcommand)
            {
                if
    (Sqlcommand.GetHashCode() != 0)
                {
                   
    SqlCacheDependency SCacheDependency = new
    SqlCacheDependency(Sqlcommand);
                    return
    SCacheDependency;
                }
                else
               
    {
                    return null;
                }
            }



            public static bool AddItemInCache(string DataName, T DataValue,
    SqlCommand Command,String DataBase_Name)
            {
                if
    (!string.IsNullOrEmpty(DataName) && DataValue.GetHashCode() !=
    0)
                {
                    if (HerpCache[DataName] ==
    null)
                    {
                        switch
    (DataBase_Name.Trim().ToLower())
                       
    {
                            case "common": timespan = new TimeSpan(24, 0,
    0);
                                break;


                            case "house":timespan = new TimeSpan(24, 0,
    0);
                                break;


                            case "oa":timespan = new TimeSpan(12, 0,
    0);
                                break;


                            case "report":timespan = new TimeSpan(24, 0,
    0);
                                break;
                            default:
    timespan = new TimeSpan(6, 0, 0);
                                break;


                        }
                        HerpCache.Add(DataName,
    DataValue, CreateSqlCacheDependency(Command), Cache.NoAbsoluteExpiration,
    timespan, CacheItemPriority.High, Callback);


                        return true;
                    }
                   
    else
                    return false;
                }
               
    else
                return false;
            }


            public static bool RemoveItemFromCache(string DataName)
           
    {
                if (string.IsNullOrEmpty(DataName))
               
    {
                    if (HerpCache[DataName] != null)
                   
    {
                        HerpCache.Remove(DataName);
                       
    return true;


                    }
                    else return false;
               
    }
                return false;
            }


            public static void RemovedItemCallBack(string key,Object
    value,CacheItemRemovedReason reason)
            {
            }


        }
    }

    引用地址:http://hi.baidu.com/jiangyangw3r/item/4290ff0235a2d112cd34ea6c

  • 相关阅读:
    蓝桥杯Java真题解析
    第十届蓝桥杯JavaB组总结
    Java框架相关
    认识JDBC
    Lua中 MinXmlHttpRequest如何发送post方式数据
    ios 的EditBox点击空白处不隐藏的解决方案
    AssetsManager 在ios更新失败解决方案
    Cocos Studio编辑器运行日志路径
    华为 进入和退出Fastboot、eRecovery和Recovery升级模式
    cocos lua 加密方案
  • 原文地址:https://www.cnblogs.com/sishierfei/p/2590516.html
Copyright © 2011-2022 走看看