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

    什么是缓存依赖,缓存依赖就是我们在为了提高系统的加载速度运用了一些必要缓存,但是缓存更新的条件,除了我们设定好的过期时间还存在一些外在依赖条件,比如依赖某些文件、依赖某些数据库,就是我们接下来要说的文件缓存依赖和数据库缓存依赖。。。

    一、文件缓存依赖

    当指定文件内容改变时,缓存会自动更新。这种方式非常适合读取配置文件的缓存处理。如果配置文件不变化,就一直读取缓存的信息,一旦配置发生变化,自动更新同步缓存的数据。

    具体测试代码如下:

    /// 获取当前应用程序指定CacheKey的Cache对象值
    public static object GetCache(string CacheKey)
    {
    System.Web.Caching.Cache objCache = HttpRuntime.Cache;
    return objCache[CacheKey];
    }

    /// <summary>
    /// 设置以缓存依赖的方式缓存数据
    /// </summary>
    /// <param name="CacheKey">索引键值</param>
    /// <param name="objObject">缓存对象</param>
    /// <param name="cacheDepen">依赖对象</param>
    public static void SetCache(string CacheKey, object objObject, System.Web.Caching.CacheDependency dep)
    {
    System.Web.Caching.Cache objCache = HttpRuntime.Cache;
    objCache.Insert(
    CacheKey,
    objObject,
    dep,
    System.Web.Caching.Cache.NoAbsoluteExpiration, //从不过期
    System.Web.Caching.Cache.NoSlidingExpiration, //禁用可调过期
    System.Web.Caching.CacheItemPriority.Default,
    null);
    }

    protected void Page_Load(object sender, EventArgs e)
    {

    string cacheKey = "testKey";
    object obj = GetCache(cacheKey);
    if (obj == null)
    {
    obj = DateTime.Now.ToString();
    if (obj != null)
    {
    System.Web.Caching.CacheDependency dep = new System.Web.Caching.CacheDependency(Server.MapPath("Web.Config"));
    SetCache(cacheKey, obj, dep);
    }
    }
    Label1.Text = obj.ToString();

    }

    结果可以看到web.config不做改变时,Label1.Text显示的时间是取的缓存中的时间,一旦web.config做了修改缓存将会更新。

    二、数据库依赖缓存

    数据库缓存就是缓存依赖于数据库某张表,表不做修改时,取缓存数据,一旦做了修改即更新缓存,在用户体验方面效果更佳。

    测试代码如下:

    获取缓存(GetCache)和加入缓存(SetCache)的方法就重复贴了,看参见文件依赖缓存的代码,具体变化在Page_Load

    protected void Page_Load(object sender, EventArgs e)
    {

    string cacheKey2 = "testData";
    object obj2 = GetCache(cacheKey2);
    if (obj2 == null)
    {
    obj2 = GetData();
    if (obj2 != null)
    {
    System.Web.Caching.CacheDependency dep = new System.Web.Caching.SqlCacheDependency("codematic", "UserInfo");
    SetCache(cacheKey2, obj2, dep);
    }
    }
    GridView1.DataSource = (DataSet)obj2;
    GridView1.DataBind();

    }

    private DataSet GetData()
    {
    string conString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["strcodematic"].ToString();
    string sql = "select * from UserInfo";
    DataSet ds = new DataSet();
    SqlConnection conn = new SqlConnection(conString);
    conn.Open();
    SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
    adapter.Fill(ds, "UserInfo");
    conn.Close();
    return ds;
    }

    你是不是以为这就结束了,结果是No,数据库缓存还需要一些配置,你首先得告诉系统你要给数据库做依赖缓存

    解决方法:SqlCacheDependency数据库缓存依赖。

    第一步: 修改web.config,让项目启用SqlCacheDependency 。

    第二步:执行下述命令,为数据库启用缓存依赖。如果要配置SqlCacheDependency,则需要以命令行的方式执行。
    aspnet_regsql.exe工具位于Windows\Microsoft.NET\Framework\[版本]文件夹中。

     OK,到此数据库缓存依赖操作基本完成,你可以看看对应启用了数据库依赖缓存的表在不做修改和修改之后,页面响应的差别

    (数量少应该缓存的效果应该体现的不明显),你可以试试看。

  • 相关阅读:
    实验吧_简单的sql注入_1、2、3
    实验吧_天下武功唯快不破&让我进去(哈希长度拓展攻击)
    实验吧_密码忘记了(vim编辑器+代码审计)&天网管理系统(php弱比较+反序列化)
    实验吧_Guess Next Session&Once More(代码审计)
    实验吧_NSCTF web200&FALSE(代码审计)
    实验吧_程序逻辑问题(代码审计)&上传绕过
    实验吧_貌似有点难(php代码审计)&头有点大
    网络安全实验室_上传关writeup
    php文件包含漏洞(input与filter)
    我为什么要写LeetCode的博客?
  • 原文地址:https://www.cnblogs.com/become/p/8554840.html
Copyright © 2011-2022 走看看