博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
服务器集群中实现Session共享的解决办法(Redis)
阅读量:6195 次
发布时间:2019-06-21

本文共 2837 字,大约阅读时间需要 9 分钟。

hot3.png

Session共享:就是当分布式部署的时候,不同服务器之间出现Session不共享的情况的解决办法

目前实现session共享的方法:

1: 可以使用nginx中的设置也可以实现session共享,在nginx有负载均衡的情况下配置ip_hash;就可以实现客户端永远连接到一个服务器,但是就失去了集群的作用了

2: 就是将sessionid和session都存到数据库中,每次去从数据库里面拿,这样的话还要去写sql,增加了服务器和数据库的压力

3: 另外可以将session采用cookie的形式存在本地,不安全

***4:就是采用redis实现session共享

采用springboot框架进行搭建 这样的好处的redis访问起来快,然后每个系统后台都是连接到redis的 首先在pom中引入spring-session包和redis连接包

org.springframework.boot
spring-boot-starter-redis
org.springframework.session
spring-session-data-redis

spring-boot配置文件:

server:  port: 8081  #8080切换启动两次

然后新建两个类,一个配置redis连接,另外一个初始化session的配置 配置redis连接的类 : SessionConfig

//这个类用配置redis服务器的连接//maxInactiveIntervalInSeconds为SpringSession的过期时间(单位:秒)@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)public class SessionConfig {    // 冒号后的值为没有配置文件时,制动装载的默认值    @Value("${redis.hostname:localhost}")    String HostName;    @Value("${redis.port:6379}")    int Port;    @Bean    public JedisConnectionFactory connectionFactory() {        JedisConnectionFactory connection = new JedisConnectionFactory();        connection.setPort(Port);        connection.setHostName(HostName);        return connection;    }}

配置初始化session的类 : SessionInitializer

//初始化Session配置public class SessionInitializer extends AbstractHttpSessionApplicationInitializer {    public SessionInitializer() {        super(SessionConfig.class);    }}

在这里进行简单的测试类:IndexController

@RestControllerpublic class IndexController {    @Value("${server.port}")    private String port;    @RequestMapping("/setSession")    public String setSession(HttpServletRequest request, String key, String value) {        HttpSession session = request.getSession();        session.setAttribute(key, value);        return "server---port:" + port + ",success";    }    @RequestMapping("/getSession")    public String getSession(HttpServletRequest request, String key) {        HttpSession session = null;        try {            session = request.getSession(false);        } catch (Exception e) {            // TODO: handle exception        }        String value = null;        if (session != null) {            value = (String) session.getAttribute(key);        }        return "server---port:" + port + "  value:" + value;    }}

启动类App

@ComponentScan(basePackages="per.lx")@EnableAutoConfigurationpublic class App {     public static void main(String[] args) {         SpringApplication.run(App.class, args);    }}

这里需要本地启动redis和nginx 在nginx中实现负载均衡到8080和8081端口

请求nginx的servername地址/index访问成功则环境搭建成功

然后请求:地址:8080/setSession?key=lx&value=123456789 会提示在哪个端口的服务器保存session成功

然后请求:地址:8081/getSession?key=lx 在两台上面都能获取到session的值则证明session共享成功

转载于:https://my.oschina.net/liaoxiang521/blog/1551236

你可能感兴趣的文章
最新解决Discuz!X3.4以下版本前台打开卡慢、后台登陆卡死或504错误等问题
查看>>
工业物联网巨星GE和西门子在制造行业齐头并进
查看>>
美国国税局若认真追究 Facebook需补税50亿美元
查看>>
《基于ArcGIS的Python编程秘笈(第2版)》——2.7 改变地图范围
查看>>
《Adobe InDesign CS6中文版经典教程》—第1课1.1节概述
查看>>
明确规范,轻量级标记语言 Markdown 标准化
查看>>
《超越平凡的平面设计:怎样做好版式(第1卷)》—第1章1.4节容易!一个简洁可行的版式...
查看>>
MVP应用架构模式
查看>>
23种设计模式总篇
查看>>
利用公司SVN服务器使用CocoaPods管理自己的私有库
查看>>
阿里云区块链共创会:BaaS正式商业化 广邀合作伙伴共建生态
查看>>
我的友情链接
查看>>
Tomcat下Solr安装配置
查看>>
iOS中的URLSession
查看>>
iOS 内存管理
查看>>
H3C网管软件IMC重装到另一台设备的问题
查看>>
我的友情链接
查看>>
Linux gdb调试器用法全面解析
查看>>
ubutu 安装zshell
查看>>
jsp九大内置对象
查看>>