乐趣区

关于后端:简单梳理一下Redis实现分布式Session建议做java开发的都看看

Redis 实现分布式 Session 治理

Memcached 管理机制

Redis 管理机制

  1. redis 的 session 治理是利用 spring 提供的 session 治理解决方案, 将一个利用 session 交给 Redis 存储, 整个利用中所有 session 的申请都会去 redis 中获取对应的 session 数据。

SpringBoot 我的项目开发 Session 治理

引入依赖 pop.xml


        <!--springboot-redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <!--spring-data-redis session 治理 -->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

        <!-- 排除内嵌 tomcat-->
        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
        </dependency>

开发 Session 治理配置类 (应用注解)

@Configuration
@EnableRedisHttpSession  // 将整个利用中应用 session 的数据全副交给 redis 解决
public class RedisSessionManager {

}

Controller 层设计

package com.xizi.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@Controller
@RequestMapping("test")
public class TestController {

    // 应用 redis 的 session 治理  留神: 当 session 中数据发生变化时必须将 session 中变动的数据同步到 redis 中
    @RequestMapping("test")
    public void test(HttpServletRequest request, HttpServletResponse response) throws IOException {List<String> list = (List<String>) request.getSession().getAttribute("list");
        if(list==null){list = new ArrayList<>();
        }
        list.add("xxxx");
        request.getSession().setAttribute("list",list);// 每次 session 变动都要同步 session

        response.getWriter().println("size:"+list.size());
        response.getWriter().println("sessionid:"+request.getSession().getId());
    }

    @RequestMapping("logout")
    public void logout(HttpServletRequest request){
        // 退出登录
        request.getSession().invalidate();// 生效
    }
}

打包测试

Nginx+Tomcat 集群 +Redis 测试

Nginx 相干配置

Tomcat 集群

// 这是 tom4 前面的两个端口号顺次 +1
// 敞开端口
<Server port="8003" shutdown="SHUTDOWN">

// 连贯端口
<Connector port="8989" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

<Connector port="10010" protocol="AJP/1.3" redirectPort="8443" />

扭转初始页面 index.jsp

3.Redis 集群

曾经开启了,不会的去看我后面的 Redis 集群搭建博客

测试

上传 war 包到三个 Tomcat 的 Webapps 目录下

间接拜访 Nginx 页面,反向代理了 Tomcat 集群

GiF 演示一波

最初

欢送关注公众号:前程有光,支付一线大厂 Java 面试题总结 + 各知识点学习思维导 + 一份 300 页 pdf 文档的 Java 外围知识点总结!

退出移动版