缓存的使用

原创 2007年10月14日 16:35:00

缓存整个页面

<%@ OutputCache Duration="30" VaryByParam="none" %> 

根据指定参数缓存页面

<%@ OutputCache Duration="30" VaryByParam="参数名" %> 

硬盘缓存

<%@ OutputCache Duration="3000" VaryByParam="none" DiskCacheable="true" %>

硬盘缓存一般用于保存大数据量的对象 且不会经常被访问的数据 因为频繁的从硬盘上读取文件会使性能反而降低

回调缓存

若希望页面部分代码不被缓存可以使用控件<asp:Substitution ID="Substitution1" runat="server" MethodName="ReturnDate" />方法必须声明为static 且必须传参HttpContext

sql数据缓存

三个步骤:
1.需要使用aspnet_regsql命令行或者SqlCacheDepencyAdmmin类配置数据库。目的是启用数据库对SQL数据缓存依赖功能的支持。

adpnet_regsql命令行的功能是完成有关数据库连接、应用服务、SQL数据缓存以来、会话状态等方面的配置。主要用来实现两项任务:
一是启用指定数据库的SQL数据库缓存依赖功能。aspnet_regsql -S ZGQ -U sa -P sa -d pubs -ed

二是启用指定表的SQL数据缓存依赖功能。aspnet_regsql -S ZGQ -U sa -P sa -d pubs -t titles -et
 
这两项配置完成后在数据库中回新建一个名为“AspNet_SqlCacheTablesForChangeNotification”表。它是启用了指定数据库的数据缓存依赖后,自动创建的数据表。该表用于记录在数据库中,启用了数据缓存依赖的数据表数据被更新的概况信息。表中有三个数据列。列tableName用于存储被更新的数据表的名称,(这些表必须启用了SQL数据缓存依赖);列notifacationCreated是用于存储数据表被更新的时间;列changeid是每当所跟踪数据表的数据发生变化时,这个字段的值就加一。ASPNET将依靠changeid的数据来决定是继续使用缓存中的数据对象还是进行更新操作。另外在数据库中还增加了几个数据存储过程、角色、触发器等。这些都是SQL数据缓存依赖功能而自动生成的。

获取当前数据库中启用SQL数据缓存以来功能的数据表列表。
aspnet_regsql -s ZGQ -U sa -P sa -d pubs -lt

关闭数据库的数据缓存依赖功能
aspnet_regsql -s ZGQ -U sa -P sa -d pubs -dd

关闭数据表的数据缓存依赖功能
aspnet_regsql -s ZGQ -U sa -P sa -d pubs -t titles -dt 

也可以使用SqlCacheDepencyAdmmin类配置数据库实现SQL缓存依赖功能

建议在Global.ascx文件中使用SqlCacheDepencyAdmin类实现对SQL缓存依赖功能的统一管理:
<%@ Application Language="C#" %>
<%@ Import Namespace="System.Configuration" %>
<%@ Import Namespace="System.Web.Caching" %>

<script runat="server">

    void Application_Start(object sender, EventArgs e)
    {
        // 在应用程序启动时运行的代码
        //以下实现的是启用数据库和数据库表的缓存依赖功能
        //如果登陆用户不具有管理pubs数据库的权限,将发生异常
        //获取连接字符串
        string connectionString = ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString;
       
        //变量needToInstall指示是否需要起用数据缓存依赖功能
        bool needToInstall = true;
        try
        {
            //获取数据库中已经具有数据缓存依赖功能的数据表名称列表
            string[] tables = SqlCacheDependencyAdmin.GetTablesEnabledForNotifications(connectionString);

            if (tables != null)
            {
                foreach (string table in tables)
                {
                    //如果已经包含准备设置缓存依赖的表,设置needToInstall值为false
                    if(table.ToLower().Equals("titles"))
                    {
                        needToInstall = false;
                       
                    }
                }
            }

        }
        catch (Exception ex)
        {
            needToInstall = true;
           
        }

        //如果变量needToInstall值为true,则启用数据库pubs和数据库表titles的缓存依赖功能。
        if (needToInstall)
        {
            try
            {
                //启用数据库pubs的数据缓存依赖功能
                SqlCacheDependencyAdmin.EnableNotifications(connectionString);
               
                //启用数据库表titles的数据缓存依赖功能
                SqlCacheDependencyAdmin.DisableTableForNotifications(connectionString, "titles");

            }
            catch (Exception ex)
            {
               
            }
           
        }

    }
   
    void Application_End(object sender, EventArgs e)
    {
        //  在应用程序关闭时运行的代码

    }
       
    void Application_Error(object sender, EventArgs e)
    {
        // 在出现未处理的错误时运行的代码

    }

    void Session_Start(object sender, EventArgs e)
    {
        // 在新会话启动时运行的代码

    }

    void Session_End(object sender, EventArgs e)
    {
        // 在会话结束时运行的代码。
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
        // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
        // 或 SQLServer,则不会引发该事件。

    }
      
</script>

缓存使用总结

缓存是提高系统性能的利器,我们开发中常用的就是本地缓存和分布式缓存,对于单机的、数据量不大的数据,可以用HashMap自己实现一个简单的缓存,也可以用Guava cache来实现。对于分布式缓存,现在...
  • w15249243295
  • w15249243295
  • 2016年09月11日 13:07
  • 1036

【宏观】缓存的应用场景

本文主要跟大家来探讨下缓存的应用场景有哪些?缓存给我们带来了哪些便利?同时又给我们带来了哪些问题?还有,简单介绍一些常用的缓存工具。JUST DO IT! Go! 缓存的应用场景 CPU缓存 ...
  • u013065023
  • u013065023
  • 2017年01月22日 20:46
  • 1662

redis做缓存的简单实例

由于之前对redis有了一个系统的研究,在公司的多个项目中使用redis当做数据缓存;所以趁着这些天晚上的时间,自己写了一个demo;这里仅供自己后期学习笔记参考,若有不对的地方,请轻拍砖! redi...
  • Leonardo9029
  • Leonardo9029
  • 2015年01月09日 09:10
  • 45514

java缓存适合使用的情况

并非所有的情况都适合于使用二级缓存,需要根据具体情况来决定。同时可以针对某一个持久化对象配置其具体的缓存策略。  适合于使用二级缓存的情况:  1、数据不会被第三方修改;  一般情况下,...
  • u014209975
  • u014209975
  • 2016年10月22日 15:55
  • 859

各种缓存技术及使用场景

可做缓存的技术,Ehcache, Linkedhashmap, Memcached, Redis,视需求而定
  • kingofworld
  • kingofworld
  • 2013年03月06日 09:55
  • 3351

使用redis作为缓存

工作中,由于遗留项目中设计不是很合理(或许刚开始很合理,但后续功能的添加,慢慢让其变形,一步步变得无法维护),导致性能比较低,现在并发数达不到需求,瓶颈主要在数据库操作,所以我们准备增加缓存层,减少系...
  • crazy_kou
  • crazy_kou
  • 2015年04月11日 21:34
  • 852

什么是Web缓存,为什么要使用它

Web缓存游走于服务器和客户端之间。这个服务器可能是源服务器(资源所驻留的服务器Add),数量可能是1个或多个;这个客户端也可能是1个或多个。Web缓存就在服务器-客户端之间搞监控,监控请求,并且把请...
  • woshiliulei0
  • woshiliulei0
  • 2015年07月01日 14:53
  • 1127

shiro的缓存到底开不开

最近使用shiro时,遇到了一个奇怪的问题,就是doGetAuthorizationInfo这个方法,会被重复调用,确切的说是每次有请求时,就会被调用。众所周知,此方法是用来给当前登录的用户加载权限的...
  • sxyandapp
  • sxyandapp
  • 2017年07月28日 16:01
  • 690

缓存-为什么需要使用分布式缓存

转载:http://in.relation.to/Bloggers/StrongLiu 为什么需要使用分布式缓存(数据网格)呢? 本文旨在回到这个问题. 首先, 它是进化的产物. 本地缓存 > 集群缓...
  • xcw931924821
  • xcw931924821
  • 2016年08月27日 15:45
  • 6136

用例子介绍mybatis的缓存机制

在实际的项目开发中,通常对数据库的查询性能要求很高,而mybatis提供了查询缓存来缓存数据,从而达到提高查询性能的要求。 mybatis的查询缓存分为一级缓存和二级缓存,一级缓存是SqlSessio...
  • zouxucong
  • zouxucong
  • 2017年04月01日 18:51
  • 1422
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:缓存的使用
举报原因:
原因补充:

(最多只允许输入30个字)