• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > ASP.NET缓存管理的几种方法

ASP.NET缓存管理的几种方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了图书管理系统asp.net,权限管理 asp.net,学生管理系统asp.net,管理系统asp.net,教材管理系统asp.net等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

尽管缓存管理在Windows应用程序中已经不再是个问题,但在web环境下依然是个挑战。因为HTTP是一个无状态的协议并且web服务无法识别不同请求的用户。识别不同的请求究竟是哪个特定用户发出的,并且存储这些信息以便它在以后请求中能被重新使用,对我们来说非常重要。ASP.NET提供了很多特性用来在客户端和服务器端存储这些数据,但是有时我们会对“我们什么时候使用它们(哪个)”感到疑惑。在ASP.NET中,我们会遇到像Session,Application以及Cache这些对象,为了有效地在web应用中有效地使用它们,理解他们之间的不同对我们来说非常重要。

背景

在这篇文章中,我将谈到在ASP.NET中不同的缓存管理方法。在web应用中,有时需要在服务端存储数据以避免从数据库检索数据和数据格式化逻辑所需的开销来提高性能,同时在接下来的请求中我们可以跨用户、跨应用、跨机器地重用同样的数据。所以,为了实现这个目的我们需要在服务端缓存数据。

缓存帮我们在3个方面实现了提高服务质量

•性能(Performance)-通过减少检索数据和格式化操作开销,缓存提高了应用程序的性能。
•可伸缩性(Scalability)-由于缓存减少了检索数据和格式化操作的开销,它降低了服务端的负载,因而提高了应用程序的可伸缩性。
•可用性(Availability)-由于应用程序从缓存中读取数据,应用程序可以在其它系统或数据库连接失败时继续运行。
不同方法

在web应用中,我们可以在服务端和客户端缓存数据、页面等。我们分别来看一下在服务端和客户端缓存。

服务端缓存管理

ASP.NET Session state

Session用来缓存每个用户的信息。这意味着这些数据是不能跨用户共享的,它只限定了创建这个会话(Session)的用户来使用它。ASP.NET中Session就是用来区分用户的。

Session能用三种方式来托管:

•进程内(Inproc)-会话状态存储在aspnet_wp.exe进程中。当应用程序域回收时Session数据会丢失。
•状态服务器(StateServer)-会话状态存储在不同的进程内,可以在不同的机器上。因为它可以存储在不同的机器上,所以这个选项支持网站群。
•Sql数据库(SQLServer)-会话状态存储在SqlServer数据库中,这个选项也支持网站群。
对于状态服务器和Sql数据库来说,这两者都需要对缓存的对象进行序列化,因为要缓存的数据是要缓存到应用程序进程之外的。这两种方式都会影响性能因为数据检索与存储需要话费更多时间相对进程内缓存来说。所以要根据具体需要以确定使用哪种缓存方式。

下面示例代码展示了如何使用Session

    if (Session["EMP_DETAILS"] == null)
    {
        //Get Employee Details for employee number passed
        details = GetEmployeeDetails(Convert.ToInt32(empNum));

        Session["EMP_DETAILS"] = details;
    }
    else
    {
        details = Session["EMP_DETAILS"];
    }

    //send it to the browser
    Response.Write(details);
}
</div>
ASP.NET application object

 ASP.NET提供了一个叫Application的对象用来存储所有用户都可以访问的数据。这个对象的生命周期与应用程序的生命周期一样,当应用程序启动时这个对象会被重新创建。与Session对象不同,Application对象可以被所有用户请求,因为这个对象是在应用程序域中创建和管理的,因而它也是不能在Web网站群中使用的。Application对象非常适合存储应用程序元数据(Config file data),这种数据可以被装载到Application对象中并且在整个应用程序周期中每个用户请求都可以访问其中的对象而不用重新装载。但是如果有这样的需求:在应用程序运行中无论什么时候对Config文件做了修改缓存数据必需失效,这时Application方式就不能提供这样的支持了。在这种情况下,就要考虑cache对象了,下面介绍cache对象的使用。

ASP.NET cache object

ASP.NET cache object是我最喜欢的缓存机制,这是为什么我在这里要多说一些的原因。ASP.NET提供了一个键-值对(key-value pair)对象--cache对象,它可以在system.web.caching名称空间中得到。它的范围是应用程序域,生命周期和应用程序生命周期一致。与Session对象不同,它是可以被不同用户来访问的。

尽管Application和Cache对象非常相似,主要区别在于Cache对象有拥有更多的特性,像过期策略、缓存依赖。它意味着数据存储在缓存对象可以根据预定义时间或它依赖的实体变化时过期或清楚,而这个特性Application对象是不支持的。

让我们来讨论下它支持的过期策略和缓存的依赖吧。

依赖

依赖意味着缓存的对象会被清除当依赖的实体发生变化时。所以可以定义一个依赖关系当依赖的对象发生变化时清除对应缓存对象。ASP.NET支持了两种依赖对象。

•文件依赖(File Dependency)-它提供了这样一种机制,当磁盘文件无论何时发生变化时自动清除缓存对象。举例来说,我的应用程序使用XML存储错误信息(错误号和错误消息的映射),用错误号来检索错误消息。每次当我想读取错误消息的时候,我不是每次都从磁盘去读取,而是当应用启动的时候将其放到Cache缓存里以便以后检索的时候再用。在程序运行过程中,当我添加新的错误信息或者修改已有的错误信息时,会发生什么情况呢?我需要停止程序运行去修改这些信息吗?根本不用,当做这样修改的时候,Cache缓存中的数据会自动失效,这就是文件缓存依赖。
下面例子显示了如何使用文件缓存来使Cache缓存失效的。所以,无论任何时候对error.xml文件作出修改时,缓存条目都会自动失效。

过期策略定义了如何以及何时让缓存的对象过期的。

•基于时间的过期(Time based expiration)-基于时间的过期提供了让用户为缓存对象预定义过期的时间。这个预定义时间可以是一个绝对时间如到2005年10月31号12点,或者相对时间,相对于缓存对象的存入时间。

//Sliding Expiration
Cache.Insert("EMP_NAME", "Shubhabrata", null,
             Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(60));
</div>
怎样知道一个缓存对象被清除了?

上面的例子描述了如何清除缓存对象,但有时我们需要知道什么时候对象从缓存中清除。可以,我们通过使用回调来实现。在上面错误信息的例子中,无论任何时候error.xml发生变化时,缓存的对象就会被清除。假设我

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ASP.NET餐饮管理系统制作代码分享
  • asp.net中页面显示当前系统时间附图
  • ASP.NET缓存管理的几种方法
  • ASP.NET网站管理系统退出 清除浏览器缓存,Session的代码
  • asp.net 简便无刷新文件上传系统
  • asp.net 获取系统中参数的实现代码
  • ASP.NET 在线文件管理
  • asp.net 权限管理分析
  • 用ASP.NET做的个性化的邮件发送系统
  • Asp.Net中NHiernate的Session的管理

相关文章

  • 2017-05-11asp.net中生成缩略图并添加版权实例代码
  • 2017-05-11mvc file控件无刷新异步上传操作源码
  • 2017-05-11DataList绑定到Row[]行集合的问题的方法
  • 2017-05-11C#简单获取屏幕鼠标坐标点颜色方法介绍
  • 2017-05-11Asp.net与SQLserver一起打包部署安装图文教程
  • 2017-05-11如何在不同.net版本实现单点登录
  • 2017-05-11asp.net为网页动态添加description描述信息的方法
  • 2018-08-20Asp.net MVC 中利用jquery datatables 实现数据分页显示功能
  • 2017-05-11ASP.NET mvc异常处理的方法示例介绍
  • 2017-05-11Asp.net之数据过滤浅析

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Asp.NET 随机码生成基类(随机字母,随机数字,随机字母+数字)
    • asp.net中对象失去焦点时自动提交数据 V2
    • .Net 实现图片缩略图上传通用方法
    • Asp.net下拉树的实现过程
    • ASP.NET过滤HTML字符串方法总结
    • ASP.NET小结之MVC, MVP, MVVM比较以及区别(一)
    • asp.net textbox javascript实现enter与ctrl+enter互换 文本框发送消息与换行(类似于QQ)
    • asp.net mvc3.0安装失败如何解决
    • asp.net TreeView与XML三步生成列表树
    • asp.net c#采集需要登录页面的实现原理及代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有