java redis session共享实现,SpringBoot - 结合Redis实现Session共享、结合Nginx实现负载均衡(请求分发)...

一、结合 Redis 进行 Session 共享配置

1,Redis 安装

首先我们需要一个 Redis服务来作为 Session服务器,Redis的安装可以参考我之前的文章:

2,项目配置

(1)编辑 pom.xml 文件,添加 Redis和 Session依赖:

除了 Redis依赖之外,这里还要提供spring-session-data-redis 依赖,Spring Session 可以做到透明化地替换掉应用的 Session容器。

org.springframework.boot

spring-boot-starter-data-redis

io.lettuce

lettuce-core

redis.clients

jedis

org.springframework.session

spring-session-data-redis

(2)接着在 application.properties中配置 Redis连接信息:

# 基本连接信息配置spring.redis.database=0spring.redis.host=192.168.60.133spring.redis.port=6379spring.redis.password=123# 连接池信息配置spring.redis.jedis.pool.max-active=8spring.redis.jedis.pool.max-idle=8spring.redis.jedis.pool.max-wait=-1msspring.redis.jedis.pool.min-idle=0

3,创建测试接口    创建一个 Contoller用来执行测试操作,里面提供了两个方法:一个 save接口用来向 Session中存储数据,还有一个 get接口用来从 Session中获取数据。

为方便演示,这里注入了项目启动的端口号server.port,主要是为了区分到底是哪个服务器提供的服务。

虽然这里还是操作的 HttpSession,但是实际上 HttpSession容器已经被透明替换,真正的 Session此时存储在 Redis服务器上。

@RestController

public class HelloController {

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

String port;

@GetMapping("/save/{name}")

public String saveName(@PathVariable("name")String name, HttpSession session) {

session.setAttribute("name", name);

return port;

}

@GetMapping("/get")

public String getName(HttpSession session) {

Object s =session.getAttribute("name");

return port + ":" + session.getAttribute("name").toString();

}

}

4,运行项目

(1)最后将项目打成 jar包上传到 CentOS上,然后执行如下两条命令启动2 个项目(使用不同端口):

nohup表示不挂断程序运行,即当终端窗口关闭后,程序依然在后台运行,最后的& 表示让程序在后台运行。

nohup java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8080 &

nohup java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8081 &

(2)如果上面执行后可能会显示“nohup: 忽略输入并把输出追加到"nohup.out"”,我们直接回车即可。

1120b4da949f0676a17673d8615a19bc.png

5,开始测试

(1)首先我们访问 8080这个项目的 /save 接口存放一个 session:

d1c3d765f4a8199fec5332f3652d7a13.png

(2)接着访问 8081项目的 /get 接口获取 session,可以发现虽然它们是不同的项目,但是 session是共享的。

4556b936f9eefa2287145fbbcfa846ed.png

二、使用 Nginx 实现负载均衡

1,安装运行

(1)首先下载 Nginx源码并解压:

wget https://nginx.org/download/nginx-1.17.0.tar.gz

tar -zxvf nginx-1.17.0.tar.gz

(2)然后进入解压目录中执行编译安装:

cd nginx-1.17.0

./configure

make

make install

(3)安装成功后,找到 Nginx安装目录,执行 sbin目录下的 nginx文件启动 nginx,命令如下:

/usr/local/nginx/sbin/nginx

(4)启动后默认端口是 80,我们可以使用浏览器直接访问:

4af48b74eadb548787f27847c307247a.png

2,修改配置文件

(1)接下来进入 Nginx安装目录修改配置文件:

vi /usr/local/nginx/conf/nginx.conf

(2)对 nginx.conf 文件进行编辑,编辑内容如下:

修改说明:

首先配置上游服务器,即两个 real server,两个 real server 的权重都是1,意味着请求将平均分配到两个real server上。

然后在 server中配置拦截规则,将拦截到的请求转发到定义好的real server 上。

upstream hangge.com {

server 192.168.60.133:8080 weight=1;

server 192.168.60.133:8081 weight=1;

}

server {

listen 80;

server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {

proxy_pass http://hangge.com;

proxy_redirect default;

}

(3)配置完成后,执行如下命令重启 Nginx:

/usr/local/nginx/sbin/nginx -s reload

3,请求分发测试

(1)首先调用/save接口存储数据。下图可以看到虽然调用的端口是 80,但实际请求被 Nginx服务器转发到 8081这个服务上:

4888f182cf01dc330e02ca9f12786ecf.png

(2)接着调用/get接口获取数据,可以看到这次请求被分发到 8080这个服务上。同时也可以发现,它们的 session是共享的。

3b3c053e36b9d14f4fb926cd44c51ce8.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值