zoukankan      html  css  js  c++  java
  • 缓存依赖的实现

    1开启sqlserver的缓存监听:找到vs的command管理窗口

    在里面 输入一下脚本

    aspnet_regsql -C "data source=.;initial catalog=testdata;user id=sa;password=123" -ed -et -t "BaseUser"对指定的表开启监听

    2配置webconfig

    在webconfig中添加

    <caching>
    <sqlCacheDependency enabled="true">
    <databases>
    <add name="CacheDependency_NHibernateSampleDb" connectionStringName="TestData" pollTime="1500"/>
    </databases>
    </sqlCacheDependency>
    </caching>

    注意:connectionStringName指定的是链接字符创中的name属性

    3封装方法

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Text.RegularExpressions;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Script.Serialization;
    
    namespace CacheDemo.Controllers
    {
        public static class CommonController
        {
            #region 轮询 缓存
            public static DataSet GetCacheData(string CacheName, string TableName, string sqlStr)
            {
                System.Web.Caching.Cache Cache = HttpRuntime.Cache;
                //要检测的数据库
                System.Web.Caching.SqlCacheDependencyAdmin.EnableNotifications(
                    System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]);
                //初检测数据库中要检测的表
                System.Web.Caching.SqlCacheDependencyAdmin.EnableTableForNotifications(
                    System.Configuration.ConfigurationManager.AppSettings["ConnectionString"], TableName);
                System.Web.Caching.SqlCacheDependency scd = new System.Web.Caching.SqlCacheDependency("CacheDependency_NHibernateSampleDb", TableName);
                SqlDependency.Start(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]);
    
                //此处可以加入自己的其它方法,如重新从数据库取得资料
                DataSet ds = new DataSet();
                using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]))
                {
                    string sql = sqlStr;
    
                    using (System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand(sql, connection))
                    {
                        System.Web.Caching.SqlCacheDependency dependency = new System.Web.Caching.SqlCacheDependency(command);
    
                        using (System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter()) //查询数据
                        {
                            adapter.SelectCommand = command;
                            adapter.Fill(ds);
                        }
                        Cache.Insert(CacheName, ds, scd);
                    }
    
                }
                return ds;
            }
            #endregion
            // <summary> 
            /// DataTable转为json 
            /// </summary> 
            /// <param name="dt">DataTable</param> 
            /// <returns>json数据</returns> 
            public static string ToJson(DataTable dt)
            {
                List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
                foreach (DataRow dr in dt.Rows)
                {
                    Dictionary<string, object> result = new Dictionary<string, object>();
                    foreach (DataColumn dc in dt.Columns)
                    {
                        result.Add(dc.ColumnName, dr[dc]);
                    }
                    list.Add(result);
                }
    
                return SerializeToJson(list);
            }
            /// <summary>
            /// 序列化对象为Json字符串
            /// </summary>
            /// <param name="obj">要序列化的对象</param>
            /// <param name="recursionLimit">序列化对象的深度,默认为100</param>
            /// <returns>Json字符串</returns>
            public static string SerializeToJson(this object obj, int recursionLimit = 100)
            {
                JavaScriptSerializer serialize = new JavaScriptSerializer();
                serialize.RecursionLimit = recursionLimit;
                string str = serialize.Serialize(obj);
                str = Regex.Replace(str, @"\/Date((d+))\/", match =>
                {
                    DateTime dt = new DateTime(1970, 1, 1);
                    dt = dt.AddMilliseconds(long.Parse(match.Groups[1].Value));
                    dt = dt.ToLocalTime();
                    return dt.ToString("yyyy-MM-dd HH:mm:ss");
                });
                return str;
            }
        }
    }
  • 相关阅读:
    TCP/IP的基本概念知识
    Mysql查询今天、昨天、7天、近30天、本月、上一月数据
    PHP OOP面向对象部分方法归总(代码实例子)
    PHP 变量
    PHP超级全局变量、魔术变量和魔术函数
    PHP编程效率的20个要点
    MemCache超详细解读
    CodeForces 652E Pursuit For Artifacts 边双连通分量
    HDU 2460 Network 边双连通分量 缩点
    HDU 3594 Cactus 有向仙人掌图判定
  • 原文地址:https://www.cnblogs.com/liuchang/p/4460301.html
Copyright © 2011-2022 走看看