`
wusuoya
  • 浏览: 641462 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

session和cache的区别

    博客分类:
  • web
 
阅读更多

以前实现数据的缓存有很多种方法,有客户端的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目前只能保存在内存中,对其性能有影响。

 


      Session:为当前用户会话提供信息。还提供对可用于存储信息的会话范围的缓存的访问,以及控制如何管理会话的方法。它存储在服务器的内存中,因此与在数据库中存储和检索信息相比,它的执行速度更快。与不特定于单个用户会话的应用程 序状态不同,会话状态应用于单个的用户和会话。因此,应用程序状态非常适合存储那些数量少、随用户的变化而变化的常用数据。而且由于其不发生服务器-客户 端数据传输,Session还适合存储关于用户的安全数据,如购物车信息。
      Session的关键特性有:存储于服务器内存中,与会话相关,在会话的整个生存期中存在即不会被主动丢弃,不被序列化,不发生服务器-客户端数据传输。
      Cache:它存储于 服务器的内存中,允许您自定义如何缓存项以及将它们缓存多长时间。例如,当缺乏系统内存时,缓存会自动移除很少使用的或优先级较低的项以释放内存。该技术 也称为清理,这是缓存确保过期数据不使用宝贵的服务器资源的方式之一。它不与会话相关,所以它是多会话共享的,因此使用它可以提高网站性能,但是可能泄露 用户的安全信息,还由于在服务器缺乏内存时可能会自动移除Cache因此需要在每次获取数据时检测该Cache项是否还存在。
Cache的关键特性有:存储于服务器内存中,与会话无关,根据服务器内存资源的状况随时可能被丢弃,不被序列化,不发生服务器-客户端数据传输。

Cookie:Cookie 提供了一种在 Web 应用程序中存储用户特定信息的方法。例如,当用户访问您的站点时,您可以使用 Cookie 存储用户首选项或其他信息。当该用户再次访问您的网站时,应用程序便可以检索以前存储的信息。在开发人员以编程方式设置Cookie时,需要将自己希望保 存的数据序列化为字符串(并且要注意,很多浏览器对Cookie有4096字节的限制)然后进行设置。

      Cookie的关键特性有:存储于客户端硬盘上,与用户相关,在一定时间内持久化存储,可以跨浏览器共享数据,需要被序列化,发生服务器-客户端数据传输。
 
下面这个问题很有启发性:
最近小组的同事很喜欢用Session做页面跳转,具体就是在查询页面把查询结果放到DataTable中,用Session存储这个dataTable,读取到数据之后再子页面做Session清除,这样对性能有没有什么影响?

1、session:session的确是存放在服务器的内存中(但不是4k上限,具体大小限制应该是服务器内存),而且同一个sessionid的多个 http请求会排队,也就是session对于同一个浏览器来说是同步的,用不好会极大影响性能。另外,session依赖于客户端cookie,因为 sessionid是存放在客户端浏览器进程cookie中的,因此不支持cookie的浏览器,session也会丢失(session url重写可部分解决这个问题,可参考:http://www.sungness.com/archives/48)。因此不建议用。

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协议中原本页面间传值的方法就是这样的,只是有时不太方便,能用之则用之。
6、自定义存储机制:如果你对性能要求很苛刻,或者非要精益求精的话。那么还是自己写一个存储机制吧。例如我自己就是写了自己的XSession对象,它 的用法与session使用类似,但是存储机制都是我自己封装的,既有cache的优点、又有session的优点,还有数据库的优点、性能看你写的算法 了、而且具有更大的使用灵活性。缺点就是需要你自己coding...
分享到:
评论

相关推荐

    C# 对Cookie、Session、Cache的操作辅助类

    在开发Web应用时,Cookie、Session和Cache是三个非常关键的概念,它们都与数据存储和管理有关,但各有其特性和应用场景。本篇文章将深入探讨C#中对这三个概念的操作辅助类,以及如何利用它们来提升Web应用的性能和...

    ASP.NET中Session和Cache的区别总结

    以下将详细探讨***中Session和Cache的区别。 首先,我们需要了解它们的基本概念。Session对象主要用于在服务器端存储特定用户的会话信息,确保用户在不同页面间切换时,其信息能够保持一致。然而,Cache对象则提供...

    Cookie&Session;&Cache;.zip

    在Web开发中,Cookie、Session和Cache是三个非常重要的概念,它们都与数据存储和用户会话管理密切相关。下面将详细解释这三个概念及其在实际应用中的操作和公共方法。 **Cookie** Cookie是一种小型文本文件,由...

    Application,_Session,_Cookie,_Viewstate,_Cache对象用法和区别

    - 使用Cache时,如果需要更高级的功能,如依赖管理和到期通知,则需使用`Insert`或`Add`方法。 3. **示例代码** ```csharp // 添加数据到Cache HttpContext.Current.Cache.Insert("ID", "cc"); // 获取Cache...

    Cookie&Session;&Cache;

    在IT行业中,尤其是在Web开发领域,Cookie、Session和Cache是三种非常重要的概念,它们用于管理用户状态、提高网站性能和优化用户体验。以下是对这些概念的详细解释,以及如何在C#中进行操作。 1. **Cookie**: ...

    用Memcached 实现简单Session Cache Server

    在实现Session Cache Server时,我们将Memcached作为存储Session的地方,当Tomcat服务器处理用户请求时,会将Session数据发送到Memcached,其他服务器在处理相同用户的请求时,可以直接从Memcached获取Session数据,...

    Python库 | boto3_session_cache-1.0.1.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:boto3_session_cache-1.0.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    session-cache:任务的会话存储

    用安装npm i session-cache --save运行测试安装开发依赖项。 npm i -d && npm test用法使用会话在gulp任务之间传递数据的示例。 var session = require ( 'session-cache' ) ( 'your app' ) ;原料药 使用给定name...

    asp.net中Session缓存与Cache缓存的区别分析

    在ASP.NET中,两种常见的服务器端缓存机制是Session缓存和Cache缓存,它们各自有不同的特性和应用场景。 首先,我们要明确两者的概念。Cookie是一种客户端缓存方式,数据存储在用户的浏览器中,主要用于存储用户...

    Session Cache Server 及Tomcat集群架构概念

    首先,Session Cache Server 是用来集中管理和缓存应用服务器中的Session数据的一种服务器。它通过集群的方式允许多个应用服务器共享相同的Session信息,从而实现高可用性和负载均衡。这种架构特别适用于需要水平...

    ASP.NET保存信息总结(Application,Session,Cookie,ViewState和Cache等)

    在 ASP.NET 中,有多种保存信息的对象,例如 Application、Session、Cookie、ViewState 和 Cache 等,每一种对象都有其特点和应用场景。下面我们将详细介绍每一种对象的特点和应用场景。 Application 对象 ...

    shiro-redisson基于Redis的ShiroCache和Session实现

    `shiro-redisson` 模块就是为了解决这个问题,将 Shiro 的缓存(Cache)和会话(Session)管理功能与 Redis 结合,实现了基于 Redis 的分布式解决方案。 1. **Redisson 库的介绍** Redisson 是一个全面的 Redis ...

    Thinkphp3.2.3 Redis session驱动

    'SESSION_CACHE_TIME' => 3, //连接超时时间(秒) 'SESSION_EXPIRE' => 120, //session有效期(单位:秒) 0表示永久缓存 'SESSION_PREFIX' => 'session_', //session前缀 'SESSION_REDIS_HOST' => '127.0.0.1', //...

    springboot +shiro+redis实现session共享(方案二)1

    本文档旨在介绍如何使用 Spring Boot、Shiro 和 Redis 实现分布式 session 共享,以解决 Web 应用程序的登录 session 统一问题。 2. 相关依赖 在实现 session 共享之前,需要在项目中引入相关依赖项,包括: * ...

    Session丢失原因和解决方案

    总结来说,理解ASP.NET Session的工作原理和潜在的丢失原因,以及掌握相应的解决策略,是提高Web应用程序稳定性和用户体验的关键。通过选择合适的Session存储模式、优化配置以及正确处理对象序列化,可以有效地避免...

    Application,Session,Cookie,ViewState和Cache生命周期

    Application,Session,Cookie,ViewState和Cache生命周期

    Application、Session、Cookie、ViewState、Cache、Hidden的区别

    ### Application、Session、Cookie、ViewState、Cache、Hidden 的区别与应用 #### Application - **信息量大小**:可存储任意大小的数据,适用于全局共享信息,如网站计数器、配置参数等。 - **作用域和保存时间**...

    Cache_Session_Cookie_Application_Hidden的区别

    ### Cache、Session、Cookie、Application 和 Hidden 的区别 在 ASP.NET 开发中,开发者经常会遇到如何选择合适的存储机制来管理用户会话数据的问题。本文将详细介绍 `Cache`、`Session`、`Cookie`、`Application` ...

    session共享之memcache Redis

    本文将深入探讨如何利用memcache和Redis实现session的共享,以此提高应用的性能和可扩展性。 首先,让我们理解什么是Session。Session是Web应用程序中用于跟踪用户状态的一种机制。在HTTP协议无状态的特性下,...

Global site tag (gtag.js) - Google Analytics