面试冲刺:29---Session/Cookie/Cache的介绍与区别、如果有几千个session如何提高效率?

一、Session/Cookie/Cache的介绍与区别

Session

  • Session 是单用户的会话状态。当用户访问网站时,产生一个 sessionid。并存在于 cookies 中。每次向服务器请求时,发送这个 cookies,再从服务器中检索是否有这个 sessionid 保存的数据

Cookie

  • Cookie 同 session 一样是保存你个人信息的,不过是保存在客户端,也就是你使用的电脑上,并且不会被丢掉,除非你删除浏览器 Cookie

Cache

  • cache 则是服务器端的缓存,是所有用户都可以访问和共享的,因为从 Cache 中读数据比较快,所以有些系统(网站)会把一些经常被使用的数据放到 Cache 里,提高访问速度,优化系统性能

二、session存储在什么地方,以什么形式存储的?

  • session变量保存在网页服务器中,你不能直接修改
  • 当然,调用程序中的setAttribute()方法当然可以了。cookie存储的可不是具体的数据,要不岂不是太不安全了,谁都可以修改session 变量了,网站也毫无安全性可言
  • 实际,在 cookie 中,存储的是一个sessionId,它标示了一个服务器中的 session 变量,通过这种方式,服务器就知道你到底是那个 session 了。顺便说一句,如果客户端不支持 cookie,session 也是可以实现的,在服务器端通过 urlEncoder,可以实现 sessionId 的传递。所以,记住客户端只存储 session 标识,实际内容在网页服务器中
  • 总结:session是存在服务器的内存中,每个会话对应一个sessionId,通过sessionId开区分是那个会话的session,是以键值对的形式存储

二、如果有几千个session如何提高效率? 

  • 把 session 放到 redis 或 memcache等此类内存缓存中,或着存储在 SSD 硬盘上
  • session 对应的文件有一个特点就是小,一般在几KB左右, 如果 session 以文件方式存储,如果并发数量级有几千个, 此时系统硬盘的随机IO早已成了系统中的最大瓶颈了,因为会话文件是存储在多个小文件中,映射到存储空间不是一段连续的地址范围
  • 所以硬盘的随机读取能力显得非常重要,而且机械硬盘的随机IO一般在 100/iops 上下, (IOPS,即每秒进行读写(I/O)操作的次数) SSD固态硬盘可以达几百至上千,所以在这么高并发读写的情况下如果无条件用 SSD 固态盘可以把session放到redis或memcache等内存缓存中,系统对内存的操作又是非常快的, 只要你的内存足够大,再多session并发速度一样不会慢

你可能感兴趣的:(面试冲刺)