关于缓存中Cookie,Session,Cache的使用
文章来源:http://canann.iteye.com/blog/1941173
以前实现数据的缓存有很多种方法,有客户端的Cookie,有服务器端的Session和Application。
其中Cookie是保存在客户端的一组数据,主要用来保存用户名等个人信息。
Session则保存对话信息。Application则是保存在整个应用程序范围内的信息,相当于全局变量。
Session
Session用来保存每一个用户的专有信息
Session的生存期是用户持续请求时间加上一段时间(一般是20分钟左右)
Session信息是保存在Web服务器内存中的,保存数据量可大可小
由于用户停止使用应用程序之后它仍在内存中存留一段时间,因此这种方法效率较低
代码:
Session[“UserID”]=”test”;
String UserName=Session[“UserID”].ToString();
Cookie
Cookie用来保存客户浏览器请求服务器页面的请求信息
我们可以存放非敏感的用户信息,保存时间可以根据需要设置
如果没有设置Cookie失效日期,它的生命周期保存到关闭浏览器为止
Cookie对象的Expires属性设置为MinValue表示永不过期
Cookie存储的数据量受限制,大多数的浏览器为4K因此不要存放大数据
由于并非所有的浏览器都支持Cookie,数据将以明文的形式保存在客户端
代码:
Resopnse.Cookies[“UserID”]=”test”;
String UserName= Resopnse.Cookies [“UserID”].ToString();
Cache
Cache用于在Http请求期间保存页面或者数据
Cache的使用可以大大的提高整个应用程序的效率
它允许将频繁访问的服务器资源存储在内存中,当用户发出相同的请求后,服务器不是再次处理而是将Cache中保存的数据直接返回给用户
可以看出Cache节省的是时间—服务器处理时间
Cache实例是每一个应用程序专有的,其生命周期==该应用程序周期
应用程序重启将重新创建其实例
注意:如果要使用缓存的清理、到期管理、依赖项等功能必须使用Insert 或者Add方法方法添加信息
代码:
Cache[”ID”]=”cc”;或者Cache.Insert(“ID”,”test”);
String ID =Cache[“ID”].ToString();
通常使用最频繁的是Session,那么Session和Cache又有什么区别呢?
Session缓存和Cache缓存的区别。
(1)最大的区别是Cache提供缓存依赖来更新数据,而Session只能依靠定义的缓存时间来判断缓存数据是否有效。
(2)即使应用程序终止,只要Cache.Add方法中定义的缓存时间未过期,下次开启应用程序时,缓存的数据依然存在。而Session缓存只是存在于一次会话中,会话结束后,数据也就失效了。
(3)Session容易丢失,导致数据的不确定性,而Cache不会出现这种情况。
(4)由于Session是每次会话就被加载,所以不适宜存放大量信息,否则会导致服务器的性能降低。而Cache则主要用来保存大容量信息,如数据库中的多个表。
(5)Session目前只能保存在内存中,对其性能有影响。
Cache:它存储于 服务器的内存中,允许您自定义如何缓存项以及将它们缓存多长时间。例如,当缺乏系统内存时,缓存会自动移除很少使用的或优先级较低的项以释放内存。该技术 也称为清理,这是缓存确保过期数据不使用宝贵的服务器资源的方式之一。它不与会话相关,所以它是多会话共享的,因此使用它可以提高网站性能,但是可能泄露 用户的安全信息,还由于在服务器缺乏内存时可能会自动移除Cache因此需要在每次获取数据时检测该Cache项是否还存在。
Cookie:Cookie 提供了一种在 Web 应用程序中存储用户特定信息的方法。例如,当用户访问您的站点时,您可以使用 Cookie 存储用户首选项或其他信息。当该用户再次访问您的网站时,应用程序便可以检索以前存储的信息。在开发人员以编程方式设置Cookie时,需要将自己希望保 存的数据序列化为字符串(并且要注意,很多浏览器对Cookie有4096字节的限制)然后进行设置。
2、cookie,也不建议存放datatable这样的“大数据”。因为cookie不仅有4k上限,并且不是“纯存放在客户端”这么简单,要知道 cookie的值在每次web页面请求往返的过程中都是要附带在http头中的,如果太大会占用服务器和客户端之间的网络带宽(虽然只是4k,但在线人多 了可就是4k * n了)。对于b/s结构的应用来说,网络带宽是性能最主要的瓶颈之一!另外,对于datatbale转换成json字符串再存入 cookie,服务器CPU也会消耗。最可怕的是,一但你的cookie忘记删除了,那么在其有效期和作用域内,用户访问你的所有页面时都将携带这个4K 大小的http头,那就悲剧了。10000在线人数,4千兆网卡也不够你花的。
3、数据库连接,每次保存查询语句然后再查询的方式不错,不过看你的查询复杂度了,如果很费时的查询,这样调用也是不可取的。内存和cpu的矛盾你要根据 实际情况作出选择。对于具有连接池的应用来说,一次连接数据的成本并不高,经过测试差不多=10次调用取当前系统时间函数。但查询语句的复杂度就没谱了。 另外,如果并发人数很多的情况下,频繁占用数据库连接,会导致连接池没有可用连接了,那就又悲剧了。此时就不是一次连接的成本,系统整体性能将毁灭性的下 降,反应迟钝。
4、cache:一个不错的选择,不过它可同样是占用服务器内存哦,只是比session多了一些灵活性。不过我也不建议你用于存放传递参数的地方。要知 道session就算内存满了也不会丢失你的参数值(会抛异常),可cache可不是,它会直接删掉你的参数值,甚至内存极度不足时都不会让你进去(也不 会报错)。换句话说,可能上一行代码刚存进去,下一行代码去读就丢了。很可怕吧~
5、form表单:最为提倡的方式,http协议中原本页面间传值的方法就是这样的,只是有时不太方便,能用之则用之。
关于缓存中Cookie,Session,Cache的使用的更多相关文章
- cookie,,session,cache,static 浅谈笔记
cookie:存在于客户端,每次请求伴随httpRequest 到达服务器端,Cookie内保存sessionId,服务器端就是根据Cookie中的SessionId找到用户的专有session , ...
- flask中cookie,session的存储,调用,删除 方法(代码demo)
# -*- encoding: utf-8 -*- # cookie,session的存储,调用,删除 from flask import Flask,make_response,request,se ...
- Cookie Session Cache
二. 工作机制 Ø Cookie :采用的是客户端保存信息的方案. Ø Session :采用服务器端保存信息的方案. Ø Cache :利用缓存 SRAM 来"静态"的保存写入信 ...
- Django中cookie&session的实现
1.什么叫Cookie Cookie翻译成中文是小甜点,小饼干的意思.在HTTP中它表示服务器送给客户端浏览器的小甜点.其实Cookie是key-value结构,类似于一个python中的字典.随着服 ...
- cookie/session在nodes中的实战
cookie 和 session 众所周知,HTTP 是一个无状态协议,所以客户端每次发出请求时,下一次请求无法得知上一次请求所包含的状态数据,如何能把一个用户的状态数据关联起来呢? 比如在淘宝的某个 ...
- Django中的session的使用
一.Session 的概念 cookie 是在浏览器端保存键值对数据,而 session 是在服务器端保存键值对数据 session 的使用依赖 cookie:在使用 Session 后,会在 Coo ...
- Tornado中Cookie过期问题
首先,web应用程序是使用HTTP协议进行数据传输,因为HTTP协议是无状态的,所以一旦提交数据完成后,客户端和服务器端的连接就会被关闭,再次进行数据的交换就得重新建立新的连接,那么,有个问题就是服务 ...
- node.js cookie session使用教程
众所周知,HTTP 是一个无状态协议,所以客户端每次发出请求时,下一次请求无法得知上一次请求所包含的状态数据,如何能把一个用户的状态数据关联起来呢? cookie 首先产生了 cookie 这门技术来 ...
- Hibernate中的session对象update方法的使用
使一个游离对象转变为持久化对象.例如以下代码在session1中保存了一个Customer对象,然后在session2中更新这个Customer对象: Customer customer = new ...
随机推荐
- UVA 11489 - Integer Game(找规律)
题目链接 #include <cstdio> #include <cstring> #include <string> #include <cmath> ...
- C程序演示产生僵死进程的过程
先抄录网上一段对僵死进程的描述: 僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中.这种 ...
- Linux下bash: scp: command not found问题 或者装ssh包时报错 Requires: libedit.so.0()(64bit)
一.用scp命令从物理主机向CentOS 6.1虚拟机传送文件,提示以下错误:bash: scp: command not found到CentOS 6.1虚拟机查看也缺少scp命令.该虚拟机 ...
- Thymeleaf基本知识
Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非Web应用. Thymeleaf的主要目标在于提供一种可被浏览器正确显示的.格式良好的模板创建方式,因此也可以用作静态建 ...
- Oracle-表格的建立
表格的建立,在table分列鼠标右键: 在名称写上此表格的名称,最好用英文,中文容易报错.表空间默认为user,也可以自己选择. 数据类型,一个汉字占用3个字节,最好多定义一些字节,防止出错. 可为空 ...
- Linux下配置Lamp
linux下配置lamp步骤: 一.快速安装Apache+PHP5+MySql 先更新: # yum update 然后安装LAMP环境:(163的yum源上只有php5.1.6 mysql 5.0. ...
- c#面向对象基础 静态成员、构造函数、命名空间与类库
静态成员 属性.方法和字段等成员是对象实例所特有的,即改变一个对象实例的这些成员不影响其他的实例中的这些成员.除此之外,还有一种静态成员(也称为共享成员),例如静态方法.静态属性或静态字段.静态成员可 ...
- 【HDU4630 No Pain No Game】 dp思想+线段树的离线操作
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4630 题意:给你n个数据范围在[1,n]中的数,m个操作,每个操作一个询问[L,R],让你求区间[L, ...
- BizTalk开发系列(三十一)配置和使用HTTP适配器
BizTalk的主机分别进程内主机和独立主机.但由于一直使用的是进程内主机,对于独立主机的认识比较模糊,前不久在做一个BizTalk的项目的时 候,个别系统使用HTTP的方式发布Txt之类的文本的.刚 ...
- windows下安装redis以及测试
Window 下安装 下载地址:https://github.com/dmajkic/redis/downloads. 下载到的Redis支持32bit和64bit.根据自己实际情况选择,将64bit ...