《集群情况下Session共享解决方案-redis.docx》由会员分享,可在线阅读,更多相关《集群情况下Session共享解决方案-redis.docx(4页珍藏版)》请在第一文库网上搜索。
1、集群情况下Session共享解决方案redis1、集群情况下SeSSion会产生什么原因?由于$e$SiOn存放在服务器端,集群下用户可能访问不同的服务器,则可能SeSSion无法共享.2、SeSSiOn共享解决方案1)NG1NX做的负载均衡可以绑定ip_hash.从而使同一个IP访问同一个服务器-该方案使得集群失去意义2)利用数据库同步SeSSion太过复杂3)利用Cookie同步SeSSion(保存一个SeSSiOn到本地,再次访问将其带到服务器端)安全性差、http请求都需要带参数增加了带宽消耗4)使用SeSSion桀群,存放到redis中(SPring-SeSSiOn)3、SPring
2、-SeSSion项目,解决SeSSiOn共享问题org.springframework.bootsring-boot-starter-redis!-springsession与redis应用基本环境配置,需要开启redis后才可以使用,不然启动SPringboot会报错一org.springframework.sessionspring-session-data-redis创建SessionConfigimportorg.Springframework.beans.factory.annotation.Va1ue;importorg.Springframework.context.annota
3、tion.Bean;importorg.springframework.data.redis.connection.jedis.JedisConnectionFactory;importorg.springframework.session.data.redis.config.annotation.web.http.Enab1eRedisHttpSession;这个类用配置redis服务器的连接/Jnax1nactive1nterva1InSeconds为SPringSeSSiOn的过期时间(单位:秒)(SEnab1eRedisHttpSession(Inax1nactive1nterva1I
4、nSeconds=1800)Pub1icc1assSessionConfig/日号后的值为没有配置文件时,制动装载的默认值VaIUe($redis.hostname:1oca1host)StringHostName;Va1ue($redis.port:6379)intPort;BeanPub1icJedisConnectionFactoryConnectionFactory()JedisConnectionFactoryconnectionnewJedisconnectionFactoryO;connection.setPort(Port);connection.SetHostName(Hos
5、tName);returnconnection;初始化SeSSiOn:/初始化SeSSion配置Pub1icc1assSessioninitia1izerextendsAbstraccHttpsessionApp1icationInitia1izeriPub1icSessioninitia1izer()super(SessionConfig-C1ass);控制层代码importjavax.serv1et.http.HttpServ1etRequest;importjavax.serv1et.http.HttpSession;imporCorg.springframework.beans.fac
6、tory.annotation.Va1ue;importorg.springframework.boot.SpringApp1ication;importorg.Springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestContro11er;QRestContro11erpub1icc1assSessionContro11erVa1ueC$server.port)privateStringPORT;QRequestMappingC/index)pub1
7、icStringindex()returnindex:+PORT;*QmethodDesc:功能描述:(往session存放值)*/QRequestMapping(setSession)pub1icStringsetSession(HttpServ1etRequestrequest.StringSeSSionKey,Stringsessionva1ue)HttpSessionsession-request.getSession(true);session.SetAttribute(sessionKey,sessionva1ue);returnsuccess,port:+PORT;*0metho
8、dDesc:功能描述:(从SeSSion获取值)*/ORequestMapping(/getSession)pub1icStringgetSession(HttpServ1etRequestrequest,StringSeSSionKey)(HttpSessionsession=nu11;try(session-request.getSession(fa1se);catch(Exceptione)e.rintstackrace();Stringva1ue=nu11;if(session!=nu11)va1ue-(String)session.getAttribute(sessionKey);returnsessionva1ue:,+va1ue+,port:+PORT;六、高并发解决方案业务数据库-数据水平分割(分区分表分库)、读写分离业务应用-逻辑代吗优化(算法优化)、公共数据缓存应用服务器7反向静态代理、配优优化、负栽均衡(apache分发,多tomcat实例)系统环境-JVM调优页面优化-减少页面连接数、页面尺寸瘦身动态资源和静态资源分离CDN加速服务分布式部署