`

转帖:JavaWeb: Redis存储Session方案

阅读更多

转帖地址:

http://blog.csdn.net/neosmith/article/details/50466367

所有支持Servlet规范的容器都自带session管理,于是大多数人都使用HttpSession接口存放状态信息。事实上, servlet的session会使得应用服务器水平扩展变的非常困难。

使用Servlet Session时的妥协方案

Session Replication

这无疑是一种浪费内存的方法,对于5台左右的集群还可以忍受,如果你需要几十甚至上百台集群,这就完全不可行。

Session Sticky

该方案虽然可以避免上面的问题,但是这完全背离了负载均衡的初衷。假如有A, B服务器,A处理session为1 ~ 5的请求,B处理session为6 ~ 10的请求,如果某个时间段内,有1 ~ 5 session的用户访问需求非常高,而6 ~ 10 session的用户不怎么访问,这样就会导致A服务器负载过高而B却十分清闲,此时负载均衡就失去了意义。

使用Redis进行Session存储

在应用编写时应该完全弃用HttpSession接口,而是将需要保存的状态信息放到Redis中。

生成session id

当用户登陆时,服务器生成一个全局唯一的字符串SESSION:日期:20位随机字符串做为redis中hash数据结构的key名,然后将该标识做为cookie返回给客户端。 之后该用户的后续请求都会带上此cookie, 我们编写一个filter, 其作用为读取请求中的标识,从redis中取出该标识对应的数据,然后放到HttpServletRequest对象中以供后续使用。

session过期

使用redis自带的过期功能为session id设置过期时间,轻松实现session过期。

session追踪

我们可以将每个用户的session id记录下来,如保存到数据库中,或者依然放在redis里,这样就可以查到某个注册用户所有session id, 轻松实现踢出登陆功能。

session更新

通过AOP, 在每个请求完后之后,检查在请求处理过程中有没有更新session信息,如果有则将新数据刷新到Redis中。

将session转移到redis中后,只要做好redis的运维工作,我们的应用服务器已经是完全无状态的了,水平扩展时只需要添加机器而不需要改动任何一行代码。

版权声明:本文为博主原创文章,转载请注明出处和原作者。
分享到:
评论

相关推荐

    redis存储tomcat session所需要的jar包

    Redis作为一款高性能的键值数据库,常被用作分布式环境下的session存储解决方案,以缓解单个服务器的压力并提高系统的可扩展性。在这个场景下,Tomcat应用服务器将不再依赖于本地内存来保存用户session,而是将...

    JavaWeb之Linux与Redis

    - `redis-cli`:Redis的命令行客户端。 - `shutdown`:关闭Redis服务。 - **高级功能**:使用Redis作为缓存系统,进行数据持久化,实现消息队列等功能。 #### 四、NoSQL数据库概览 ##### 4.1 NoSQL数据库特点 ...

    方立勋:JavaWeb视频前十一天教程配套ppt下载

    大家共同为为互联网贡献一...方立勋JavaWeb视频教程_Cookie和Session(第七天) 方立勋JavaWeb视频教程_jsp(第八天) 方立勋JavaWeb视频教程_jsp与案例(第九、十天) 方立勋JavaWeb视频教程_自定义标签库开发(第十一天)

    JavaWeb讲义:JavaWeb应用简介

    JavaWeb技术是构建互联网应用程序的一种强大工具,它基于Java平台,为开发动态、交互式的Web应用提供了丰富的功能。本讲义将重点介绍JavaWeb的基本概念、核心组件以及常用框架。 一、JavaWeb应用概述 JavaWeb应用是...

    《Android开发视频教程》第五集:JavaWeb实现产品表维护三.zip

    《Android开发视频教程》第五集:JavaWeb实现产品表维护三.zip

    学习笔记:javaWeb考试系统(基于MVC模式)

    JavaWeb在线考试系统是基于MVC(Model-View-Controller)设计模式开发的一款应用程序,它主要用于帮助学生和教师进行线上测试和评估。在这个系统中,MVC模式将应用程序分为三个主要部分:模型(Model)、视图(View...

    JavaWeb项目:JavaWeb01

    基础知识代码结合

    JavaWeb初级案例:javaweb商品管理程序的学习案例

    创建一个简单的 JavaWeb 商品管理程序通常涉及以下资源和功能:1.项目结构:2.创建一个 JavaWeb 项目,通常使用 Maven 或 Gradle 进行项目管理。项目结构应该包括常见的 src 文件夹、WebContent(或 webapp)文件夹...

    毕设项目:JavaWeb基于Servlet的超市账单管理系统.zip

    当用户登录后,其信息会被存储在session中,直到会话结束或用户主动注销。 7. **请求转发与重定向**:在Servlet中,可以使用RequestDispatcher的forward()方法实现请求转发,用于在同一应用内部跳转;而redirect()...

    JavaWeb项目:JavaWeb01_BigProject

    最终项目(管理员登录+查询所有用户+删除修改用户)

    JavaWeb程序设计入门课件Session对象共9页.p

    【JavaWeb程序设计入门课件Session对象共9页.pdf】 在JavaWeb开发中,Session对象是HTTP协议无状态特性的补充,它为客户端与服务器端之间提供了存储会话级数据的机制。本课件深入浅出地介绍了Session的概念、工作...

    javaWEB项目解决session不共享,一用见效,很详细

    - **Redis介绍**:Redis是一个高性能的键值存储系统,支持多种数据结构,适合存储Session数据。 - **集成步骤**: - 添加依赖:如压缩包中的`redis-session-manager-with-dependencies-2.2.2-SNAPSHOT.jar`,这是...

    JSON:javaWeb后台JSON的封装包---源码

    和 XML 一样,JSON 也是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一个复杂...

    项目演示:JavaWeb简单erp项目案例.zip

    JavaWeb项目 源码仅供参考 欢迎下载学习

    javaweb 问答系统使用 redis + jsp + mysql

    javaweb 问答系统使用 redis + jsp + mysql。 javaweb问答系统使用redis+jsp+mysql,可以发帖,回帖,点赞,,登录注册,查看浏览数,前端与后台,权限访问,附带数据库文件 jsp redis mysql

    java 课程设计/毕业设计之校园管理系统项目源码(javaweb+ssm).zip

    技术栈:javaweb+ssm 系统介绍:校园管理系统主要实现以下目标:对师生档案的管理,学生成绩的管理、教职工的管理,如:班主任的任职,教师的授课科目等;课程代码的维护。 作用范围:java 课程设计、毕业设计 技术...

    javaweb之cookie和session的应用

    1. **存储位置**:Cookie存储在客户端,Session存储在服务器端。 2. **安全性**:由于Session数据存储在服务器,相对Cookie更安全,不易被窃取。 3. **容量限制**:Cookie大小一般限制为4KB,而Session容量相对较大...

    Session-JavaWeb专题

    1. **集中式 Session 存储**:如使用 Redis 或 Memcached 作为共享的 Session 存储。 2. **反向代理**:通过配置反向代理服务器(如 Nginx),使得所有应用程序共享同一个 Session 存储。 3. **URL 重写**:通过 URL...

Global site tag (gtag.js) - Google Analytics