[.net 面向对象程序设计进阶] (14) 缓存(Cache)(一) 认识缓存技术

本节导读:

缓存(Cache)是一种用空间换时间的技术,在.NET程序设计中合理利用,可以极大的提高程序的运行效率。

本节将介绍如何利用缓存写出高效率的代码。

1. 什么是缓存(Cache)?

缓存(Cache)是一种用空间换取时间的技术

存在于计算机中很多地方,用来将一些慢速设备中的常用数据保存在快速设备中,取数据的时候直接从快速设备中取。

比如CPU二级缓存、内存、windows文件读取缓存。

2. .NET缓存技术分类

.NET的缓存从软件架构角度分为客户端缓存和服务器端缓存.

这里主要介绍几种常用的缓存技术:

基于Web客户端缓存:Cookies

基于Sever端缓存:Session、Application、Cache

3. 缓存的优缺点

缓存的优点:以空间换取时间,通过缓存,提高了访问效率。

缓存的缺点:对于即时性要求较高的程序来说,缓存不具备即时性。

因此我们在使用缓存技术时,要充分考虑使用环境,合理利用缓存。

最常用的工厂反射模式中,我们就可以利用缓存来存储动态反射的对象,以备下次访问时,快速返回.

4.客户端缓存Cookies

4.1 Cookie应用场景 

Cookie可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(当然,不排除用户手工删除Cookie)。而还有一些Cookie在用户退出会话的时候就被删除了,这样可以有效保护个人隐私。

主流的浏览器都默认支持Cookie,由于Cookie会记录用户的一些信息,因此出现了很多广告窗,就是利用这一特性,能知道我们最近都浏览和关注了什么,从而定向显示广告。

4.2 Cookies的生命周期

Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。

因此Cookie的生命周期,只要不清除,就一直存在于缓存文件中。

4.3 Cookie的使用

Cookie在Web的应用非常广泛。下面列举我们常用的Jquery库中对Cookie的操作

先说一下Jquery库,目前可以说是Javascript的标准库了,操作简单,轻量级,非常受欢迎。由于本系列主要讨论的是.NET面向对象程序设计,我们下面,简单的列举出基于Jquery库的一个Cookie操作组件:jquery.cookie.js

使用方法

A.新添加一个会话 cookie:

$.cookie('the_cookie', 'the_value');

注:当没有指明 cookie有效时间时,所创建的cookie有效期默认到用户关闭浏览器为止,所以被称为

“会话cookie(session cookie)”。

B.创建一个cookie并设置有效时间为 7天:

$.cookie('the_cookie', 'the_value', { expires: 7 });

注:当指明了cookie有效时间时,所创建的cookie被称为“持久 cookie (persistent  cookie)”。

C.创建一个cookie并设置 cookie的有效路径:

$.cookie('the_cookie', 'the_value', { expires: 7, path: '/' });

注:在默认情况下,只有设置 cookie的网页才能读取该 cookie。如果想让一个页面读取另一个页面设

置的cookie,必须设置cookie的路径。cookie的路径用于设置能够读取 cookie的顶级目录。将这

个路径设置为网站的根目录,可以让所有网页都能互相读取 cookie (一般不要这样设置,防止出现冲突) 。

D.读取cookie:

$.cookie('the_cookie'); // cookie存在 => 'the_value'

$.cookie('not_existing'); // cookie不存在 => null

E.删除cookie,通过传递null作为cookie的值即可:

$.cookie('the_cookie', null);

5. Session和Application

5.1 Session 在.NET 5 中应用

如下:

 <div style="position:fixed;top:200px;left:200px;width:200px;height:200px;text-align:center; line-height:100px;">

    @{
ViewBag.Title = "Home Page";
Session["user"] = "yubinfeng";
string user = Session["user"] is Nullable ? "" : Session["user"].ToString();
}
Session 读取: @Html.Raw(user) <br>
</div>

上面代码中括号中,使用的是MVC中的一些页面语法,后面会涉及到,这里主要说明Session的赋值及取值。

运行MVC项目结果如下:

Seeion生命周期是会话级,一个会话结束Session失效,打开一个浏览器请求一个网站的页面后,Session开始,当session超过时间限制(一般是20分种)后,session注销而失效 或是人为使用session.invalidate();使用session失效。

5.2 Application

另一个Application 在WebForm为应用程序级的存储,生命周期为服务端应用程序启用动时开始到应用程序重启失效。比如公共在线人数等存储可以用到,在MVC框架中会有更好的实现服务器级存储的方法,后面在MVC的时候具体介绍。

6. 要点:

本节主要介绍了缓存的基础知识及几种缓存的简单应用,下一节重点说明服务器端的缓存Cache,这也是我们.NET程序设计的重点。

==============================================================================================

返回目录

 <如果对你有帮助,记得点一下推荐哦,如有有不明白或错误之处,请多交流>

<对本系列文章阅读有困难的朋友,请先看《.net 面向对象编程基础》>

<转载声明:技术需要共享精神,欢迎转载本博客中的文章,但请注明版权及URL>

.NET 技术交流群:467189533   

==============================================================================================

[.net 面向对象程序设计进阶] (14) 缓存(Cache) (一) 认识缓存技术的更多相关文章

  1. [.net 面向对象程序设计进阶] (1) 开篇

    [.net 面向对象程序设计进阶] (1) 开篇 上一系列文章<.net 面向对象编程基础>写完后,很多小伙伴们希望我有时间再写一点进阶的文章,于是有了这个系列文章.这一系列的文章中, 对 ...

  2. [.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能

    [.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能 本节导读: 上节说了缓存是以空间来换取时间的技术,介绍了客户端缓存和两种常用服务器缓布,本节主要介绍一种. ...

  3. [.net 面向对象程序设计进阶] (21) 反射(Reflection)(下)设计模式中利用反射解耦

    [.net 面向对象程序设计进阶] (21) 反射(Reflection)(下)设计模式中利用反射解耦 本节导读:上篇文章简单介绍了.NET面向对象中一个重要的技术反射的基本应用,它可以让我们动态的调 ...

  4. [.net 面向对象程序设计进阶] (4) 正则表达式 (三) 表达式助手

    [.net 面向对象程序设计进阶] (2) 正则表达式(三) 表达式助手 上面两节对正则表达式的使用及.NET下使用正则表达式作了详细说明,本节主要搜集整理了常用的正则表达式提供参考. 此外为了使用方 ...

  5. [.net 面向对象程序设计进阶] (6) Lamda表达式(二) 表达式树快速入门

    [.net 面向对象程序设计进阶] (6) Lamda表达式(二) 表达式树快速入门 本节导读: 认识表达式树(Expression Tree),学习使用Lambda创建表达式树,解析表达式树. 学习 ...

  6. [.net 面向对象程序设计进阶] (28) 结束语——告别2015

    [.net 面向对象程序设计进阶] (28) 结束语——告别2015 <.net面向对象程序设计进阶>这一系列文章写了太长的时间了,大概有半年没写,在年底又一口气写了好几篇.在整个过程中目 ...

  7. [.net 面向对象程序设计进阶] (27) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git

    [.net 面向对象程序设计进阶] (26) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git 本篇导读: 接上两篇,继续Git之旅 分布式版本控制系统 ...

  8. [.net 面向对象程序设计进阶] (26) 团队开发利器(五)分布式版本控制系统Git——图形化Git客户端工具TortoiseGit

    [.net 面向对象程序设计进阶] (26) 团队开发利器(五)分布式版本控制系统Git——图形化Git客户端工具TortoiseGit 读前必备: 接上篇: 分布式版本控制系统Git——使用GitS ...

  9. [.net 面向对象程序设计进阶] (25) 团队开发利器(四)分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境

    [.net 面向对象程序设计进阶] (25) 团队开发利器(四)分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境 本篇导读: 前面介绍了两款代码管理工具 ...

随机推荐

  1. select2 清空数据

    最近用select2插件,发现用jquery重置不好使,最后搜罗了一把发现下面这个方法可以间接的实现,有空还得看看插件的API $('#integratorId').select2('data', n ...

  2. 迷之bug

    是这样的.要解决tbody滚动,而thead不动的布局问题,我把它们分别放在两个表格里,上面的只有thead,下面的只有tbody, 然后解决宽度对齐的问题,我用colgroup设置每列的宽度,用的都 ...

  3. 关于ADO.NET连接ORACLE,使用ODAC连接中的一些问题

    ADO.NET连接ORACLE时,用到ODAC组件时,有几点注意的. 1.安装的具体方法见:http://jingyan.baidu.com/article/e4511cf336ce872b845ea ...

  4. EF CodeFirst 使用T4模板 生成文件

    小编是个实用主义者,并没有深入的去理解T4的原理.只是根据自己的需求,在博客园里的前辈哪里找的资料,结合自己的理解,在项目中使用了T4模板. 最近的项目用了他,很方便,节省了不少代码量. 想利用T4做 ...

  5. js遍历json

    function test1(){ var json = [{name:'wang',age:22,sex:1},{name:'tang',age:25,sex:1},{name:'yuan',age ...

  6. Thinkphp3.2.3 执行query命令 包括在模板中使用<php> </php>时 query的使用方法

    $sql="select * from `rjshop_productbase` where `id`=1"; $Model =M();$query=$Model->quer ...

  7. C#调用exe文件,IIS发布后无法掉用本地exe程序的解决方法

    http://blog.csdn.net/junjieking/article/details/6277836?reload这位楼主的问题,我也遇到了,但是我按照他那样操作并没有解决问题,弄了好久终于 ...

  8. bzoj 3821: 玄学

    题目大意 有一个长度为 n 数列,有若干个事件,事件分为操作和询问两种, 一次操作是把数列[l...r] 区间中的每个元素x变成 ax + b mod p. 一次询问是询问 执行了 第l 次到第r次操 ...

  9. linux 进程通信 管道

    1. 管道概述及相关API应用 1.1 管道相关的关键概念 管道是Linux支持的最初Unix IPC形式之一,具有以下特点: 管道是半双工的,数据只能向一个方向流动:需要双方通信时,需要建立起两个管 ...

  10. 字符串转换为数字---使用java7的装箱功能

    以前转换只知道使用Xxx.prasexxx方法,原来,还可以直接装箱自动转换. //String类型字符串 String intStr = "123"; int str2int1 ...