您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > 【黑马程序员】SpringBoot应用之分布式会话
黑马程序员合肥中心编著【黑马程序员】SpringBoot应用之分布式会话本文主要讲怎么在springboot应用里头搭建分布式会话。对于分布式的应用来说,用户的会话管理通常有SessionStick,Session复制,Session集中管理,基于Cookie管理四种方式。各自点评一下:SessionStick需要某个用户的会话与某台服务器想绑定,有点耦合Session复制每台服务器都有全部的会话信息,会话同步需要时间,另外每台服务器都有全量数据也是个问题Session集中管理单独的会话服务,不需要同步,但是同样有网络开销,另外需要处理单点问题基于Cookie管理把session数据放在cookie中,增加网络载荷,另外也存在安全问题。黑马程序员合肥中心编著本文主要关注集中式Session方面,其实现主要有两种方案,一种是容器相关的,比如基于Tomcat的tomcat-redis-session-manager以及基于Jetty的jetty-session-redis等等;另一种就是容器解耦的,就是今天要集成的Spring-Session。[url=]配置redis集群[/url][url=]新建项目[/url][url=]配置application.properties[/url][AppleScript]纯文本查看复制代码?123456#1.3.0.RELEASE以后的版本使用server.session.timeout=10#server.session-timeout=10#1.2.7.RELEASE以及之前的版本使用spring.redis.host=192.168.99.100#这个就是dockermachinedefault虚拟机的ip#spring.redis.password=secretspring.redis.port=6379[url=]测试Controller[/url][AppleScript]纯文本查看复制代码?01020304050607080910111213/***Createdbypatterncaton*/@RestController@RequestMapping(/session)publicclassHelloController{@RequestMapping(/uid)Stringuid(HttpSessionsession){UUIDuid=(UUID)session.getAttribute(uid);if(uid==null){uid=UUID.randomUUID();}黑马程序员合肥中心编著14151617session.setAttribute(uid,uid);returnsession.getId();}}[url=]启动[/url]访问[AppleScript]纯文本查看复制代码?1d1b1cc0c-519e-431a-973c-6c742a014660[url=]查看redis[/url][AppleScript]纯文本查看复制代码?1234docker@default:~$dockerexec-itredis-master/bin/bashroot@86784a615b3d:/data#redis-clikeys'*'1)spring:session:sessions:d1b1cc0c-519e-431a-973c-6c742a0146602)spring:session:expirations:1453639380000相当于[AppleScript]纯文本查看复制代码?12SADDspring:session:expirations:expire-rounded-up-to-nearest-minutesession-idEXPIREspring:session:expirations:expire-rounded-up-to-nearest-minute1800expirations:1453639380000表示该session将在1453639380000这个时刻被删除。1800表示1800秒,即30分钟,默认30分钟过期。[url=]看看session对象[/url][AppleScript]纯文本查看复制代码?1127.0.0.1:6379hkeys黑马程序员合肥中心编著23456789spring:session:sessions:d1b1cc0c-519e-431a-973c-6c742a0146601)sessionAttr:uid2)lastAccessedTime3)maxInactiveInterval4)creationTime127.0.0.1:6379hgetspring:session:sessions:d1b1cc0c-519e-431a-973c-6c742a014660sessionAttr:uid\xac\xed\x00\x05sr\x00\x0ejava.util.UUID\xbc\x99\x03\xf7\x98m\x85/\x02\x00\x02J\x00\x0cleastSigBitsJ\x00\x0bmostSigBitsxp\xa0E\xe3\x1d\xf9K\xecW6\xcf\xbc\xfbU\x13M\x88127.0.0.1:6379hgetspring:session:sessions:d1b1cc0c-519e-431a-973c-6c742a014660lastAccessedTime\xac\xed\x00\x05sr\x00\x0ejava.lang.Long;\x8b\xe4\x90\xcc\x8f#\xdf\x02\x00\x01J\x00\x05valuexr\x00\x10java.lang.Number\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00xp\x00\x00\x01Rs\x8d\x12b30分钟过后已经过期[AppleScript]纯文本查看复制代码?1234127.0.0.1:6379hgetspring:session:sessions:d1b1cc0c-519e-431a-973c-6c742a014660creationTime--raw(error)ERRwrongnumberofargumentsfor'hget'command127.0.0.1:6379keys*(emptylistorset)再刷新网页得到新的sessionid[AppleScript]纯文本查看复制代码?13ed21473-c5ee-41e1-b64e-35b0737c0365[url=]问题[/url]设置的timeout没有生效,都以1800秒为准了。经验证,得这样设置才有效:[AppleScript]纯文本查看复制代码?1@EnableRedisHttpSession(maxInactiveIntervalInSeconds=60)//1分钟失效
本文标题:【黑马程序员】SpringBoot应用之分布式会话
链接地址:https://www.777doc.com/doc-7708845 .html