基于PetShop的数据可视化网站(二):缓存依赖

在系列(一)中,我简单的介绍了数据的提取过程,这次将简单的介绍下缓存依赖。

具体的项目文件可以参考我的github仓库

缓存依赖使用前提

在某些情况下,我们可能会不断的查询数据库,当查询的次数较多并且数据库表内容较多时,网页的加载速度将会慢的令人发指。因此当访问此数据库表的用户较多或程序访问此数据库表的频率较高时,我们可以建立数据库缓存依赖来改善加载速度。

数据库缓存依赖需要首先得到SQL数据库支持,可以参考李天平老师的博文第二步做法进行实现。

缓存依赖的结构

和PetShop的DAL结构差不多,缓存依赖也分为缓存依赖类接口(ICacheDependency),缓存依赖实现类(TableCacheDependency)和缓存依赖类的工厂类(CacheDependencyFactory)。

缓存依赖类接口

接口文件非常简单,仅仅要求实现类实现GetDependency()方法,代码如下:

using System.Web.Caching;

namespace FWSync.ICacheDependency
{
    public interface IFWSyncCacheDependency
    {
        AggregateCacheDependency GetDependency();
    }
}

缓存依赖实现类

在缓存依赖实现类中,TableDependency.cs是所有实现类的基类,其实现了接口中的方法,并且增加了一个读取缓存依赖数据库的方法。

同时,我们还应该为相应的数据库表建立缓存依赖实现类,具体代码如下:

TableDependency.cs

using System.Web.Caching;
using System.Configuration;

namespace FWSync.TableCacheDependency
{
    public abstract class TableDependency : FWSync.ICacheDependency.IFWSyncCacheDependency
    {
        protected char[] configurationSeparator = new char[] { ',' };

        protected AggregateCacheDependency dependency = new AggregateCacheDependency();

        protected TableDependency(string configKey)
        {
            string dbName = ConfigurationManager.AppSettings["CacheDatabaseName"];
            string tableConfig = ConfigurationManager.AppSettings[configKey];
            string[] tables = tableConfig.Split(configurationSeparator);

            foreach (string tableName in tables)
                dependency.Add(new SqlCacheDependency(dbName, tableName));
        }

        public AggregateCacheDependency GetDependency()
        {
            return dependency;
        }
    }
}

Device.cs

using System.Web.Caching;

namespace FWSync.TableCacheDependency
{
    public class Device : TableDependency
    {
        public Device() : base("DeviceTableDependency") { }

    }
}

缓存依赖类工厂类

这里工厂类的作用依然是创建相应缓存依赖类的实例,作为一种固定格式来使用即可。

工厂类包含两个类,代码分别如下:

DependencyAccess.cs

using System;
using System.Reflection;
using System.Configuration;
using FWSync.ICacheDependency;

namespace FWSync.CacheDependencyFactory
{
    public static class DependencyAccess
    {
        private static readonly string path = ConfigurationSettings.AppSettings["Cache"];

        private static IFWSyncCacheDependency LoadInstance(string className)
        {
            string path = ConfigurationManager.AppSettings["CacheDependencyAssembly"];
            string fullyQualifiedClass = path + "." + className;
            return (IFWSyncCacheDependency)Assembly.Load(path).CreateInstance(fullyQualifiedClass);
        }

        public static IFWSyncCacheDependency CreateDependency()
        {
            string className = path + ".TableDependency";
            return (IFWSyncCacheDependency)Assembly.Load(path).CreateInstance(className);
        }

        public static IFWSyncCacheDependency CreateDeviceDependency()
        {
            return LoadInstance("Device");
        }
    }
}

DependencyFacade.cs

using System.Configuration;
using System.Web.Caching;
using System.Collections.Generic;
using FWSync.ICacheDependency;

namespace FWSync.CacheDependencyFactory
{
    public static class DependencyFacade
    {
        private static readonly string path = C
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值