1. 程式人生 > >集群的session問題解決方案

集群的session問題解決方案

方案 conn ive new sco turn () 解釋 原理

一、nginx ip_hash

  同一個ip的請求轉發到同一個服務器,太low不解釋。

二、spring-session

原理:存入session中的key-value,同時存放到redis中,如果session中沒有找到,就去redis中去獲取。

添加依賴

    <!--spring boot 與redis應用基本環境配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-redis</artifactId>
        </dependency>
        <!--spring session 與redis應用基本環境配置,需要開啟redis後才可以使用,不然啟動Spring boot會報錯 -->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

添加配置

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

@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配置
public class SessionInitializer extends AbstractHttpSessionApplicationInitializer{
    public SessionInitializer() {
        super(SessionConfig.class);
    }
}

集群的session問題解決方案