Redis作session共享

Redis作session共享

在大多数项目中,用户请求会经由负载均衡分发到不同的后端服务器上,如果不做session共享,那么用户的请求被打倒不同服务器上时就会发生session丢失。springboot提供了自动化的session共享配置,集成Redis可以很方便的实现session共享。

session共享

做了session共享的服务器在接收到请求后无论是存session还是取session,操作的都是Session服务器,而不再是自身web容器。选择Redis作session共享,是青睐其高并发性能。

代码

步骤一:

新建一个springboot项目,添加Redis依赖、web依赖和spring-session-data-redis依赖

pom文件

<!--Redis & Jedis依赖-->		
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
     <!--spring-boot-starter-data-redis使用lettuce作为Redis的Java客户端,但博主更熟悉Jedis,可以像这样配置-->
            <exclusions>
                <exclusion>
                    <groupId>io.lettuce</groupId>
                    <artifactId>lettuce-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
		<dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
<!--web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
<!--Redis下session共享所需依赖-->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

步骤二:

编写application.yml配置文件

# 服务器端口,默认就是8080,在此配置只是为了在后面注入属性
server:
  port: 8080
# redis连接配置
spring:
  redis:
    database: 0
    host: 192.168.43.129
    port: 6379
    password: 981104
    jedis:
      pool:
        max-active: 16
        max-idle: 16
        min-idle: 1
        max-wait: -1ms

步骤三:

编写一个Controller

@RestController
public class TestController {
    @Value("${server.port}")
    private String port;

    @PostMapping("login")
    public String login(HttpSession session, String name) {
        session.setAttribute("name", name);
        return port;
    }

    @GetMapping("/check")
    public String check(HttpSession session) {
        String name = (String) session.getAttribute("name");
        return port + "====" + name;
    }
}

步骤四:

开启session共享支持,在入口类上添加@EnableRedisHttpSession注解。

@SpringBootApplication
@EnableRedisHttpSession
public class Demo06SessionApplication {
    public static void main(String[] args) {
        SpringApplication.run(Demo06SessionApplication.class, args);
    }
}

这个注解有一些属性,解释一下:

  • maxInactiveIntervalInSeconds:session存活时间,默认1800秒;
  • redisNamespace:Redis中的key名称,默认是“spring:session”;
  • cleanupCron:清理过期session的定时任务Cron表达式,默认是"0 * * * * *"。

打包部署

点击右侧Maven工具栏中Lifecycle下的package进行打包

打包

生成的jar包在当前项目的target目录下

接下来通过XFTP这种文件传输工具上传到虚拟机,执行如下命令,启动项目:

java -jar demo06_session-1.0.0.jar --server.port=8080 &
java -jar demo06_session-1.0.0.jar --server.port=8081 &

这样启动后一旦你的会话窗口关闭,项目也会随之挂起,可以使用如下命令让项目在窗口关闭后继续在后台运行

nohup java -jar demo06_session-1.0.0.jar --server.port=8080 &
nohup java -jar demo06_session-1.0.0.jar --server.port=8081 &

接下来配置Nginx做负载均衡,修改Nginx配置文件:

upstream www.jdq.com{
    # 服务清单列表,配置目标服务的ip以及端口号
    server 192.168.43.129:8080;
    server 192.168.43.129:8081;
}
server {
    listen       80;
    server_name  localhost;
    # 配置一个地址路径拦截
    location / {
        # 配置代理,其中www.jdq.com 为自定义内容,但需要对应上面一个upstream
        proxy_pass http://www.jdq.com;
        proxy_redirect default;
    }

启动Nginx,用Postman测试,结果如下:

c85uMd.png

c85UMj.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值