zoukankan      html  css  js  c++  java
  • Asp.net缓存技术(HttpRuntime.Cache)

    一.缓存:

    • 5个等级的缓存
      1. 1级是网络级缓存,缓存在浏览器,CDN以及代理服务器中   (举个例子:每个帮助页面都进行了缓存,访问一个页面的代码非常简单)
      2. 2级是由.net框架 HttpRuntime.Cache完成,在每台服务器的内存中。
      3. 3级Redis,分布式内存键值存储,在多个支撑同一个站点的服务器上共享缓存项。
      4. 4级SQL Server Cache,整个数据库,所有数据都被放到内存中。
      5. 5级SSD。通常只在SQL Server预热后才生效。

    二.下面主要介绍HttpRuntime.Cache缓存

    意义:

    把数据放到Cache中,在指定的时间内,可以直接从Cache中获取,避免对数据库等的压力。

    设置和读取:

    设置: 

         //
            // 摘要:
            //     向 System.Web.Caching.Cache 中插入具有依赖项和到期策略的对象。
            //
            // 参数:
            //   key:
            //     用于引用该对象的缓存键。
            //
            //   value:
            //     要插入缓存中的对象。
            //
            //   dependencies:
            //     所插入对象的文件依赖项或缓存键依赖项。 当任何依赖项更改时,该对象即无效,并从缓存中移除。 如果没有依赖项,则此参数包含 null。
            //
            //   absoluteExpiration:
            //     所插入对象将到期并被从缓存中移除的时间。 要避免可能的本地时间问题(例如从标准时间改为夏时制),请使用 System.DateTime.UtcNow
            //     而不是 System.DateTime.Now 作为此参数值。 如果使用绝对到期,则 slidingExpiration 参数必须为 System.Web.Caching.Cache.NoSlidingExpiration。
            //
            //   slidingExpiration:
            //     最后一次访问所插入对象时与该对象到期时之间的时间间隔。 如果该值等效于 20 分钟,则对象在最后一次被访问 20 分钟之后将到期并被从缓存中移除。
            //     如果使用可调到期,则 absoluteExpiration 参数必须为 System.Web.Caching.Cache.NoAbsoluteExpiration。
            //
            // 异常:
            //   System.ArgumentNullException:
            //     key 或 value 参数为 null。
            //
            //   System.ArgumentOutOfRangeException:
            //     将 slidingExpiration 参数设置为小于 TimeSpan.Zero 或大于一年的等效值。
            //
            //   System.ArgumentException:
            //     为要添加到 Cache 中的项设置 absoluteExpiration 和 slidingExpiration 参数。
            public void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration);

    读取:

         HttpRuntime.Cache[“name”]

    三.案例分析:

    代码:

    ////Cache是全局共享的
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/plain";
                DataTable dt = (DataTable)HttpRuntime.Cache["persons"]; //首先从缓存中取值!返回的是一个object类型的值
                if (dt == null)  //缓存中没有值就访问数据库读取值
                {
                    DataTable table = SqlHelper.ExecuteQuery("select *from Person");  
                    HttpRuntime.Cache.Insert("persons", table, null, DateTime.Now.AddMinutes(1), TimeSpan.Zero);//将查询到的值在存入缓存中
                    context.Response.Write(table.Rows.Count);  //测试用于输出的
                    return;
                }
                context.Response.Write(dt.Rows.Count);
            }

    执行过程:

    第一次访问:

    第二次访问:

  • 相关阅读:
    [LeetCode] Trips and Users 旅行和用户
    [LeetCode] Rising Temperature 上升温度
    [LeetCode] Delete Duplicate Emails 删除重复邮箱
    [LeetCode] Department Top Three Salaries 系里前三高薪水
    Spring boot Jackson基本演绎法&devtools热部署
    使用spring tool suite(STS)工具创建spring boot项目和出现错误后的处理
    Spring Boot 2.0官方文档之 Actuator
    springboot 使用webflux响应式开发教程(二)
    SpringBoot在自定义类中调用service层等Spring其他层
    springBoot单元测试-模拟MVC测试
  • 原文地址:https://www.cnblogs.com/fengxuehuanlin/p/5358219.html
Copyright © 2011-2022 走看看