方案一: session同步(复制)
方案二: 将session数据存储在客户端
方案三: hash一致性(可用)
方案四: 统一存储
pom.xml导入依赖
<dependency><groupId>org.springframework.sessiongroupId><artifactId>spring-session-data-redisartifactId>dependency>
application.yml配置
spring:redis:host: 192.168.145.8port: 6379# 使用redis存储session解决分布式共享问题session:store-type: redisserver:# session过期时间为30分钟servlet:session:timeout: 30m
主启动类配置&#64;EnableRedisHttpSession注解
package com.kenai.gulimall.auth;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.openfeign.EnableFeignClients;import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;&#64;EnableRedisHttpSession // 整合redis作为session存储&#64;EnableFeignClients&#64;EnableDiscoveryClient&#64;SpringBootApplicationpublic class GulimallAuthServerApplication {public static void main(String[] args) {SpringApplication.run(GulimallAuthServerApplication.class, args);}}
session存入redis代码编写
&#64;Controllerpublic class test {// session存入redis&#64;ResponseBody&#64;GetMapping("/test")public String test(HttpSession session){session.setAttribute("test_session", "data");return "ok";}// 从redis中获取session&#64;ResponseBody&#64;GetMapping("/getRedisSession")public String testGet(HttpSession session){String data &#61; (String) session.getAttribute("test_session");return data;}}
修改域名及session的redis缓存序列化
package com.kenai.gulimall.auth.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;import org.springframework.data.redis.serializer.RedisSerializer;import org.springframework.session.web.http.COOKIESerializer;import org.springframework.session.web.http.DefaultCOOKIESerializer;&#64;Configurationpublic class GulimallSessionConfig {// 改变域名等信息。子域名向redis缓存中存放session信息&#xff0c;为了让整个域名都可用&#xff0c;通过修改域名为根域名实现// gulimall.com域名及子域名的COOKIE中有一个名叫GULIMALLSESSION的COOKIE// GULIMALLSESSION当中存放sessionid信息,当向redis请求的时候会带上COOKIE信息,所以便能根据COOKIE中存放的sessionId找到redis中存放的session信息// session信息中有我们存入的属性信息,比如用户id:用户信息.&#64;Beanpublic COOKIESerializer COOKIESerializer(){DefaultCOOKIESerializer COOKIESerializer &#61; new DefaultCOOKIESerializer();COOKIESerializer.setDomainName("gulimall.com");COOKIESerializer.setCOOKIEName("GULIMALLSESSION");return COOKIESerializer;}// session存入redis缓存的json序列化&#64;Beanpublic RedisSerializer<Object> springSessionDefaultRedisSerializer(){return new GenericJackson2JsonRedisSerializer();}}