您的位置:首页 > 数据库 > Redis

SpringBoot整合NoSql(二)——Redis远程连接ESC服务器实现session 共享

2020-03-17 18:41 741 查看


 在这样的架构中,会出现一些单服务中不存在的问题,例如客户端发起一个请求发到 Tomcat A 上,然后在 Tomcat A 上往 session 中保存了一份数据,下次又来一个请求,这个请求被转发到 Tomcat B 上,此时再去 Session 中获取数据,发现没有之前的数据。对于这一类问题的解决,思路很简单,就是将各个服务之间需要共享的数据,保存到一个公共的地方.

seesion共享:

使用Redis实现session共享原理如下,简单来说就是把session存到redis中去!多个服务器都能够通过Redis共享这个Session,因此我们在访问不同的服务器时,虽然不是原来拥有session服务器,但是我们仍然可以通过Redis共享的session进行成功的访问!

Spring Session作用

Spring Session 就是使用 Spring 中的代理过滤器,将所有的 Session 操作拦截下来,自动的将数据 同步到 Redis 中,或者自动的从 Redis 中读取数据。
对于开发者来说,所有关于 Session 同步的操作都是透明的,开发者使用 Spring Session,一旦配置完成后,具体的用法就像使用一个普通的 Session 一样。

为什么引入security?

spring 2.1.5开始,远程连接Redis必须引入Spring security,这里虽然仅仅在本地进行,但是后面远程连接服务器,仍会用到这个示例。

一、服务器相关配置和安装

1.开放
8080端口
&
6379端口

方式一:在阿里云平台开放

 阿里云服务器ECS处于安全考虑默认自带安全组(仅开放了22号和3389号端口),Tomcat的默认端口号为8080,所以想使用Tomcat不开放8080端口是不行的。很多用户通过修改iptables来开放8080号端口,结果失败,这是由于安全组,对安全组,阿里云亘古不变的安全组开放端口问题。
如果不配置80端口会导致nginx欢迎界面无法返回!
参考链接:阿里云ECS云服务器如何开放8080端口?

方式二:使用防火墙开放

参考链接:CentOS7防火墙、端口开放常用命令

3.Redis安装配置

参考链接:Aliyun租了ESC服务器,第一件事我用它安装Redis

二、创建SpringBoot工程

选用依赖:

application.properties
配置文件下面配置我们的Redis

spring.redis.host=121.40.83.80  #远程服务器ip
spring.redis.port=6379          #Redis默认端口
spring.redis.password=123456    #Redis密码
spring.redis.database=0         #Redis数据

server.port=8080


 如果对密码设置有疑问 参考链接:Aliyun租了ESC服务器,第一件事我用它安装Redis

写控制类接口

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpSession;

public class TestController {
@RestController
public class HelloController {
@Value("${server.port}")
Integer port;
@GetMapping("/set")
public String set(HttpSession session) {
session.setAttribute("user", "alvin");
return String.valueOf(port);
}
@GetMapping("/get")
public String get(HttpSession session) {
return session.getAttribute("user") + ":" + port;
}
}
}

三、将项目打包成
jar
包并运行

1.将项目打包为
jar包

2.分别在
8080
8081
端口执行
jar

  • 8080
cd target
java -jar session-0.0.1-SNAPSHOT.jar

  • 8081
cd target
java -jar session-0.0.1-SNAPSHOT.jar server.port=8081


 此时我们已经执行了两个seesion实例,这样我们可以通过登录来验证他们是否进行了session共享

3. 登陆验证

 首先测试

8080端口


 因为加入了SpringSecurity因此需要输入密码

测试
8081端口:


 不难发现,虽然8080和8081端口密码并不一致,但是此时,8081端口已经无需登录,就可以进入页面,说明已经实现了session共享!
 远程服务器Redis中也已经缓存了我们的session数据

参考链接
https://yq.aliyun.com/articles/701181
https://github.com/lenve/javaboy-code-samples
https://www.runoob.com/linux/nginx-install-setup.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
Lukey Alvin 发布了84 篇原创文章 · 获赞 139 · 访问量 13万+ 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: