springboot整合redis使用nginx实现负载均衡实现session共享

再看这篇demo前请先确保阅读了我的下面这2个demo:
1.nginx整合多个tomcat实现负载均衡:
http://blog.csdn.net/eumenides_/article/details/78356623
2.springboot整合redis:
http://blog.csdn.net/eumenides_/article/details/78298088
这一章就不看项目目录了,基本和2差不多,说说改变的地方:
pom先加两个依赖:

<dependency>
    <groupId>org.springframework.sessiongroupId>
    <artifactId>spring-session-data-redisartifactId>
dependency>

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-redisartifactId>
    <version>1.3.8.RELEASEversion>
dependency>

然后是config包下的RedisUtils类加一个类注解@EnableRedisHttpSession
使其开启spring session支持 实现session共享,
说明一下,原来是utils包,我觉得不合适,放的是配置类所以改名成了config,看一下代码:

@Configuration
@EnableCaching //启用缓存,这个注解很重要;
@EnableRedisHttpSession //开启spring session支持  实现session共享
public class RedisUtils extends CachingConfigurerSupport {
    //这里不赘述了,代码和之前一样,主要是多了@EnableRedisHttpSession这个注解
}

然后是controller加两个方法来验证我们负载均衡和session共享的效果:
为了省事界面就不写了,直接浏览器模拟一下就行,主要看效果:

@GetMapping("/login/{id}/{name}")
public void login(HttpServletRequest request,@PathVariable Integer id,@PathVariable String name){
    JSONObject user = new JSONObject();
    user.put("id",id);
    user.put("name",name);
    request.getSession().setAttribute("user",user.toJSONString());
}

 @GetMapping("/main")
 public String hello(HttpServletRequest request){
     String sessionId = request.getSession().getId();
     String user = (String) request.getSession().getAttribute("user");
     return "这是tomcat1
"
+ "sessionId : " + sessionId + "
user : "
+ user; }

编码部分的工作到这基本就差不多了,现在我们来把demo打成jar包跑起来:
首先我们先用maven把2个jar包打好:
springboot整合redis使用nginx实现负载均衡实现session共享_第1张图片
打第二个时候记得把第一个jar包复制粘贴出来放在一个准备好的文件夹里,
然后把controller的第二个方法return部分的“
我的tomcat1”->”我是tomcat2”(为了界面能显著看出来访问两个不同服务器)
准备好两个jar包后,我们启动nginx,然后运行java命令分别指定18080和28080端口启动2个jar包
(因为我nginx配的是18080和28080),
java启动命令:
java -jar C:\Users\ccq\IdeaProjects2\redis_demo\target\redis_demo-0.0.1-SNAPSHOT.jar –server.port=18080
然后我们浏览器先访问:
http://localhost/user/login/1/张三
相当于我们把id:1,name:”张三”的信息放到了session,然后访问:
http://localhost/user/main
来回多次刷新来验证是否实现了负载均衡和是否访问不同服务器是还能取到user值:
springboot整合redis使用nginx实现负载均衡实现session共享_第2张图片
springboot整合redis使用nginx实现负载均衡实现session共享_第3张图片
如图所示:多次刷新访问被nginx分发到了不同的服务器上,由于权重的配置,tomcat2访问几率高,然后不同服务器都能取到user的信息,至此完毕。

你可能感兴趣的:(redis)