以前实现数据的缓存有很多种方法,有客户端的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字节的限制)然后进行设置。
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协议中原本页面间传值的方法就是这样的,只是有时不太方便,能用之则用之。
相关推荐
在开发Web应用时,Cookie、Session和Cache是三个非常关键的概念,它们都与数据存储和管理有关,但各有其特性和应用场景。本篇文章将深入探讨C#中对这三个概念的操作辅助类,以及如何利用它们来提升Web应用的性能和...
以下将详细探讨***中Session和Cache的区别。 首先,我们需要了解它们的基本概念。Session对象主要用于在服务器端存储特定用户的会话信息,确保用户在不同页面间切换时,其信息能够保持一致。然而,Cache对象则提供...
在Web开发中,Cookie、Session和Cache是三个非常重要的概念,它们都与数据存储和用户会话管理密切相关。下面将详细解释这三个概念及其在实际应用中的操作和公共方法。 **Cookie** Cookie是一种小型文本文件,由...
- 使用Cache时,如果需要更高级的功能,如依赖管理和到期通知,则需使用`Insert`或`Add`方法。 3. **示例代码** ```csharp // 添加数据到Cache HttpContext.Current.Cache.Insert("ID", "cc"); // 获取Cache...
在IT行业中,尤其是在Web开发领域,Cookie、Session和Cache是三种非常重要的概念,它们用于管理用户状态、提高网站性能和优化用户体验。以下是对这些概念的详细解释,以及如何在C#中进行操作。 1. **Cookie**: ...
在实现Session Cache Server时,我们将Memcached作为存储Session的地方,当Tomcat服务器处理用户请求时,会将Session数据发送到Memcached,其他服务器在处理相同用户的请求时,可以直接从Memcached获取Session数据,...
资源分类:Python库 所属语言:Python 资源全名:boto3_session_cache-1.0.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
用安装npm i session-cache --save运行测试安装开发依赖项。 npm i -d && npm test用法使用会话在gulp任务之间传递数据的示例。 var session = require ( 'session-cache' ) ( 'your app' ) ;原料药 使用给定name...
在ASP.NET中,两种常见的服务器端缓存机制是Session缓存和Cache缓存,它们各自有不同的特性和应用场景。 首先,我们要明确两者的概念。Cookie是一种客户端缓存方式,数据存储在用户的浏览器中,主要用于存储用户...
首先,Session Cache Server 是用来集中管理和缓存应用服务器中的Session数据的一种服务器。它通过集群的方式允许多个应用服务器共享相同的Session信息,从而实现高可用性和负载均衡。这种架构特别适用于需要水平...
在 ASP.NET 中,有多种保存信息的对象,例如 Application、Session、Cookie、ViewState 和 Cache 等,每一种对象都有其特点和应用场景。下面我们将详细介绍每一种对象的特点和应用场景。 Application 对象 ...
`shiro-redisson` 模块就是为了解决这个问题,将 Shiro 的缓存(Cache)和会话(Session)管理功能与 Redis 结合,实现了基于 Redis 的分布式解决方案。 1. **Redisson 库的介绍** Redisson 是一个全面的 Redis ...
'SESSION_CACHE_TIME' => 3, //连接超时时间(秒) 'SESSION_EXPIRE' => 120, //session有效期(单位:秒) 0表示永久缓存 'SESSION_PREFIX' => 'session_', //session前缀 'SESSION_REDIS_HOST' => '127.0.0.1', //...
本文档旨在介绍如何使用 Spring Boot、Shiro 和 Redis 实现分布式 session 共享,以解决 Web 应用程序的登录 session 统一问题。 2. 相关依赖 在实现 session 共享之前,需要在项目中引入相关依赖项,包括: * ...
总结来说,理解ASP.NET Session的工作原理和潜在的丢失原因,以及掌握相应的解决策略,是提高Web应用程序稳定性和用户体验的关键。通过选择合适的Session存储模式、优化配置以及正确处理对象序列化,可以有效地避免...
Application,Session,Cookie,ViewState和Cache生命周期
### Application、Session、Cookie、ViewState、Cache、Hidden 的区别与应用 #### Application - **信息量大小**:可存储任意大小的数据,适用于全局共享信息,如网站计数器、配置参数等。 - **作用域和保存时间**...
### Cache、Session、Cookie、Application 和 Hidden 的区别 在 ASP.NET 开发中,开发者经常会遇到如何选择合适的存储机制来管理用户会话数据的问题。本文将详细介绍 `Cache`、`Session`、`Cookie`、`Application` ...
本文将深入探讨如何利用memcache和Redis实现session的共享,以此提高应用的性能和可扩展性。 首先,让我们理解什么是Session。Session是Web应用程序中用于跟踪用户状态的一种机制。在HTTP协议无状态的特性下,...