wap流量统计分析平台(转)

来源:互联网 发布:qq炫舞一键开黑软件 编辑:程序博客网 时间:2024/04/27 23:34

在《他舅网wap流量统计分析平台》开发中为了提高系统的性能,我们利用Cache来保存数据,例如把用户的一些权限信息放在Cache中,但这样做会有些问题,何时清除Cache与数据保持同步,下面我在项目中使用Cache的心得,与大家分享。

一、利用CacheDependency类
  它在命名空间System.Web.Caching中。CacheDependency类会与文件之间建立依附性关系。在文件更改时,该Cache项会自动移除。

方法:
  把用户权限信息保留成XML文件,当管理员更新数据时,同时更新这个XML文件。

代码:
//Cahce值为XML文件内容
XmlDocument doc = Cache["user"] as XmlDocument;

        if (doc == null)
        {
            doc = new XmlDocument();
            string filePath = Server.MapPath("user.xml");
  //建立依赖项
            CacheDependency c = new CacheDependency(filePath);
            doc.Load(filePath);
  //建立依赖关系
            Cache.Insert("skin", doc, c
            ,Cache.NoAbsoluteExpiration
            ,TimeSpan.FromMinutes(30)
            );
        }

二、利用SqlCacheDependency类
  它也在命名空间System.Web.Caching中,SqlCacheDependency会与数据库表或SQL Server查询结果建立依赖关系,这种方法操作比较复杂。

步聚1:
在Web.Config文件中增加数据库连接串与Cache配置节点。
<configuration>
<appSettings/>
  <connectionStrings>
    <add name="connStr" connectionString="server=192.168.1.24;uid=sa;pwd=l23;database=CacheTest;"/>
  </connectionStrings>

<system.web>
    <caching>
      <sqlCacheDependency>
        <databases>
          <!--节点connectionStringNam的值connStr必须与上面定义的连接串节点name的值相同-->
          <add name="entryName" connectionStringName="connStr" pollTime="50000"/>
        </databases>
      </sqlCacheDependency>
    </caching>
  </system.web>
</configuration>

步聚2:
  在Global.asax文件中填加代码,目地是在应用程序端启用依赖监听器,该方法的参数为数据库的连接字符串。
    void Application_Start(object sender, EventArgs e)
    {
        System.Data.SqlClient.SqlDependency.Start(ConfigurationManager.ConnectionStrings["connStr"].ConnectionString);
    }
   
    void Application_End(object sender, EventArgs e)
    {
        System.Data.SqlClient.SqlDependency.Stop(ConfigurationManager.ConnectionStrings["connStr"].ConnectionString);
    }

步聚3:
  定义数据库依赖项。
String  CacheName  =  "CacheName ";
        String strconnection = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;

        DataTable  table  =  new  DataTable();

        if(Cache[CacheName]  ==  null)
        { 
          SqlConnection  conn  =  new  SqlConnection(strconnection);
          SqlCommand  cmd  =  new  SqlCommand( "select * from dbo.user" , conn);
          cmd.CommandType = CommandType.Text;

          //这时非常重要
          SqlCacheDependency  dep  =  new  SqlCacheDependency(cmd);
          SqlDataAdapter  adp  =  new  SqlDataAdapter(cmd);

          conn.Open();
          adp.Fill(table);
          conn.Close();

          TimeSpan  ts  =  new  TimeSpan(1,  0,  0);
  //建立依赖
          Cache.Add(CacheName,  table,  dep,  Cache.NoAbsoluteExpiration,  ts,  CacheItemPriority.High,  null);
                       
        }
        else
        {
          table  =  (DataTable)Cache[CacheName];
        }

步聚4:
启用 SQL 缓存依赖项。
  运行 Aspnet_regsql.exe文件,目录在C:/WINDOWS/Microsoft.NET/Framework/<你的Framework版本号文件夹>/aspnet_regsql.exe
输入命令行aspnet_regsql.exe -S <服务器名称> -U <用户名> -P <密码> -ed -d 数据库名 -et -t 表名
执行完命令后,系统自动会在相应的数据库中增加了一些存储过程,这样就全部完成了。

心得:
      第一种方法使用简单方便,在本项目中经常使用。
  第二种方法对SQL语名限制较严格,不能带有Where关键字,也不能用存储过程。如果您知道解决方法请分享。

原创粉丝点击