spring boot 项目使用redis和nginx实现session共享

背景

实现session共享的方案如下图所示,当tomcat想要往session写数据时都往redis中去写,相应的如果想要读取session中的数据时也都从redis中读取,这样就可以实现不同的服务器共享session中的数据了。
在这里插入图片描述

工程创建

  1. 引入依赖web、session、redis、如果spring boot版本在2.0.15以上还需要引入security。
    在这里插入图片描述
    对应的依赖为:
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>
  1. application.properties中加入redis相关配置
spring.redis.database=0
spring.redis.host=127.0.0.1
# 在redis5.0以上版本远程连接必须要设置密码
spring.redis.password=123456
spring.redis.port=6379
  1. 编写一个测试类
@RestController
public class HelloController {
    
    

    @Value("${server.port}")
    Integer port;

    @GetMapping("/set")
    public Integer set(HttpSession session) {
    
    
        session.setAttribute("name","zl");
        return port;
    }

    @GetMapping("/get")
    public String get(HttpSession session) {
    
    
        return ((String)session.getAttribute("name"))+" "+port;
    }
}
  1. 使用maven打包成一个jar包
    在这里插入图片描述

准备环境

  • redis已安装并可以正常启动
  • nginx已安装并可以正常启动
  • jdk环境
  • jar包上传到服务器

启动服务

[root@bogon server-web]# nohup java -jar sessionshare-0.0.1-SNAPSHOT.jar --server.port=8080 > 8080.log &
[1] 4249
nohup: ignoring input and redirecting stderr to stdout
[root@bogon server-web]# nohup java -jar sessionshare-0.0.1-SNAPSHOT.jar --server.port=9090 > 9090.log &
[2] 4276
nohup: ignoring input and redirecting stderr to stdout
[root@bogon server-web]# ps -ef|grep java
root       4249   3688 29 07:50 pts/1    00:00:12 java -jar sessionshare-0.0.1-SNAPSHOT.jar --server.port=8080
root       4276   3688 96 07:51 pts/1    00:00:06 java -jar sessionshare-0.0.1-SNAPSHOT.jar --server.port=9090
root       4295   3688  0 07:51 pts/1    00:00:00 grep --color=auto java
  • nohup 表示当终端关闭时,服务不要停止运行
  • & 表示让 服务在后台启动

查看服务是否正常

在这里插入图片描述
在这里插入图片描述

注意:启动服务后,要保证服务器8080和9090端口是开放的包括后面nginx使用的80端口。具体开放端口的方法可以参考:https://blog.csdn.net/weixin_43398820/article/details/102692584

nginx配置

nginx.conf添加配置

    #gzip  on;
    #upstream 表示配置上游服务器集群
    upstream example.session.com{
    
    
        #配置每个单独服务,weight表示权重,下面每个权重1/2
	    server 127.0.0.1:8080 weight=1;
        server 127.0.0.1:9090 weight=1;
    }
    server {
    
    
        listen       80;
        server_name  localhost;
        location / {
    
    
            #proxy_pass 表示请求转发的地址
            proxy_pass http://example.session.com;
            proxy_redirect default;
        }
}

测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过测试可发现,多次访问set或者get接口都会轮流的去访问不同端口的两个服务

猜你喜欢

转载自blog.csdn.net/weixin_43398820/article/details/108181156