发表于: 2020-08-22 23:16:44

0 1465


今天完成的事情

1. 了解 Spring Session

2. 使用 redis 保存 session

3. 了解 redis 哨兵模式与集群

4. redis 主从分离配置


收获

1. Spring Session

Spring Session 可以无缝集成到 Spring Boot 项目中,让我们方便的使用 redis 或者 mysql 等存储方式来管理 session。


2. Spring Boot 集成 Spring Session

依赖清单

<!-- web 项目必须的依赖-->

<dependency>

<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<!-- 使用 redis 来存储 session-->

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

</dependency>

<!--Spring Session 组件-->

<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>


application.yml

在 redis 运行在 localhost:6379 且未设置密码,项目运行在默认的 8080 端口的情况下直接使用默认的配置就好

spring:
redis:
host: localhost


能够获取到 session 就返回内部的信息,否则就新建一个 session(session 存储的过程不需要显示写出来,启动类上加的 @EnableRedisHttpSession 注解会进行处理)

@SpringBootApplication
@EnableRedisHttpSession
public class SessionDemoApplication {

public static void main(String[] args) {
SpringApplication.run(SessionDemoApplication.class, args);

}

}


controller

@RestController
public class SessionDemoController {

@RequestMapping("/hello")
public String printSession(HttpSession session, String name) {
String storedName = (String) session.getAttribute("name");
if (storedName == null) {
session.setAttribute("name", name);
storedName = name;
}
return "hello " + storedName;
}

}


运行效果:

在浏览器中第一次打开

redis 存储查看


重启项目(redis 不动)之后更改连接再次刷新

可以看到 session 信息没有丢失,因为被 redis 存起来了,项目在收到浏览器传过来的 sessionid 之后去 redis 里面查询到了对应的信息。


完全关闭浏览器后再测试

redis 内容:

可以看到原来的 session 还未失效,关闭浏览器再打开就是是另外一个会话,所以这一次项目把新的 session 存起来了。


3. redis 读写分离

在这个演示里面并没有做到读写分离,但是可以做到。


使用 docker 下载 redis 镜像并且启动

docker pull redis


docker run -d --name redis-master-6379 -p 6379:6379 -d redis ##启动redis

docker run -d --name redis-slave-6380 -p 6380:6379 -d redis

docker run -d --name redis-slave-6381 -p 6381:6379 -d redis


查看 redis-master-6379 的内网 ip,id 是随机生成的

docker inspect [id]


得到其 docker 内部的 ip 之后去从 redis 设置一下,连接到 master

进入两个从属 redis docker 的 redis-cli 运行以下命令

slaveof   [ip]   6379


这个时候进入 master 的 redis-cli 之后应该就可以看到有两台从属 redis 连接了。


redis-master-6379 被连接之前的信息,可以看到 connected_salves:0

连接上之后就可以查看到两台从属 redis


还是以上面的 Spring Session 为例,这个时候运行项目测试可以看到两台从属的 redis 也会复制 master 的数据。

主:

从:

从:




返回列表 返回列表
评论

    分享到