首页 > 编程知识 正文

redis集群session共享,redis和session区别

时间:2023-05-05 09:40:59 阅读:32013 作者:746

什么是会话会话? HTTP协议是无状态协议,因此在服务端需要记录用户状态时,需要通过某种机制识别特定用户。 Session是记录客户状态的另一种机制,但Cookie存储在客户端浏览器中,Session存储在服务器上。 当客户端访问服务器时,服务器以某种形式将客户端信息记录在服务器上。 这就是Session。 客户端再次访问时,只需从该Session中查找该客户端的状态。

为什么需要会话共享

用户的请求首先到达前端网关,前端网关根据路由策略将请求分发到后端服务器。 这将第一个请求传递给服务器1,下一个请求传递给服务b。 如果不共享Session,用户可能会登录到服务2,并在下次请求时到达服务2并请求用户重新登录。

Spring Session Spring Session为创建和管理servlet的httpsession提供了一组方案。 Spring Session通过提供集群会话(clustered sessions,群集会话)功能(默认采用外置的 Redis 来存储 Session 数据)来解决会话共享问题。

Spring Session 为企业级 Java 应用的 session 管理带来了革新,使得以下的功能更加容易实现:

用于管理API和用户会话的实现。 http会话-允许将http会话中性替换为APP应用程序容器,即Tomcat。 将会话保存的状态卸载到特定的外部会话存储,如Redis或Apache Geode

于是,它们可以以独立于APP应用服务器的方式提供高质量的集群。 通过每个浏览器支持多个会话,可以轻松构建更丰富的最终用户体验。 控制会话id在客户端和服务器之间的交换方式。 这使您可以从HTTP标头信息中获取会话id,而不依赖于cookie,从而轻松创建rest风格的API。 用户使用WebSocket发送请求时,可以使HttpSession保持活动状态。 Spring为Spring Session和Redis的集成提供了组件。 spring-session-data-redis演示了如何使用:

快速整合

引入依赖包

ependencygroupidorg.spring framework.session/groupidartifactidspring-session-data-redis/artifact id/dependency 1111

@ configuration @ enableredishttpsession (maxinactiveintervalinseconds=86400 * 30 )公共类会话配置{ } maxinactiveintervalinseconds 3360设置会话过期日期,并在使用Redis Session时禁用原始Boot的server.session.timeout属性。 12345模拟登陆Session 配置

添加登录方法,登录成功后将用户信息保存到Session中。

@requestmapping(value='/login ' ) publicstringlogin ) httpservletrequestrequest,String userName,String password ) strd useruser=user repository.findbyusername (username; If (用户!=nulluser.getpassword((.equals ) password ) { request.getSession ) setattribute('user ',user ); msg='登录成功!' ; }返回msg; }只有在定义}12345678910index方法且用户登录后才会显示。 如果没有index content信息,系统会提示您先登录。

@requestmapping(value='/index ' ) public string index (httpservletrequestrequest ) { String msg='首页内容}; Object user=request.getSession ().getattribute('user ' ); if(user==null ) { msg='请先登录! '; }返回msg; }复制} 123456789项目,更改项目端口号: 8899和8800

添加登陆方法和注册方法:

访问: http://localhost:8800/index和http://localhost:8899/index将提示您先登录。

在8800窗口中登录: localhost:8800/login? userName=xiaolipassword=123456。

成功登录后访问首页:显示首页内容,通过8899端口直接访问首页,显示首页内容,发现实现了session共享。

结束登录:

@requestmapping(value='/logout ' ) public string logout (httpservletrequestrequest ) { http session session=request.Gert } 返回' '; (12345---------csdn.net/weixin (4155736/article )不知名的csdy来源) csdn原文) https://blog.csdn.net/weixin (444https://转载请附上博文链接!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。