session-data-redis

版权声明:未经授权,不得转载。 https://blog.csdn.net/soulsda/article/details/83687441

1.首先要引入jar包

     <dependency>
         <groupId>org.springframework.session</groupId>
         <artifactId>spring-session-data-redis</artifactId>
         <version>${spring.session.version}</version>
     </dependency>    

   1.1 jar包的版本目前是


          <spring.session.version>1.3.1.RELEASE</spring.session.version>

   
2.根据官方文档查看所要配置的config ,我起名为HttpSessionConfig
   2.1 :首先在类名上打上注解

     通用的配置注解
           @Configuration
     声明了基于reids管理session
           @EnableRedisHttpSession
           //默认的过期时间是1800秒和普通session相同,可以自己设置时间
           @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)
          


    2.2 :策略

    @Bean
    public HttpSessionStrategy httpSessionStrategy(){
        return new HeaderHttpSessionStrategy();
    } 


    2.3 :配置redis连接工厂
            

   @Bean
   public JedisConnectionFactory connectionFactory(){
            
        JedisConnectionFactory connectionFactory = new JedisConnectionFactory();
                
        String redisHost = parameters.getRedisNode().split(":")[0];
        int redisPort = Integer.valueOf(parameters.getRedisNode().split(":")[1]);
                
        connectionFactory.setTimeout(2000);
        connectionFactory.setHostName(redisHost);
        connectionFactory.setPort(redisPort);
        connectionFactory.setPassword(parameters.getRedisAuth());
                
        return connectionFactory;

   }

3.完整demo


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

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600)
public class HttpSessionConfig {


    @Autowired
    private Parameters parameters;

    @Bean
    public HttpSessionStrategy httpSessionStrategy(){
        return new HeaderHttpSessionStrategy();
    }


    @SuppressWarnings("Duplicates")
    @Bean
    public JedisConnectionFactory connectionFactory(){

        JedisConnectionFactory connectionFactory = new JedisConnectionFactory();

        String redisHost = parameters.getRedisNode().split(":")[0];
        int redisPort = Integer.valueOf(parameters.getRedisNode().split(":")[1]);

        connectionFactory.setTimeout(2000);
        connectionFactory.setHostName(redisHost);
        connectionFactory.setPort(redisPort);
//        connectionFactory.setPassword(parameters.getRedisAuth());

        return connectionFactory;

    }


}


4.用法 :和普通session用法相同   
            

//简单举例
   @RequestMapping("login")
   public ApiResult login(@Valid User user, HttpSession session){
          ApiResult resp = new ApiResult(Constants.RESP_STATUS_OK,"登录成功");
          UserElement ue = userService.login(user);
          if(ue != null){
              if (session.getAttribute(Constants.REQUEST_USER_SESSION) == null){
                 session.setAttribute(Constants.REQUEST_USER_SESSION,ue);
              }
              resp.setData(ue);
    
           }
          return resp;
    }

5:区别
   4.1:和普通session在于,将session存在redis中,分布式环境下请求redis服务便可做到分布式的session管理
   4.2:顺便说一下,parameters是取配置文件中配置好的redis连接信息,但这是另一项技术,这里不做赘述。

    @Autowired
    private Parameters parameters;


 


        
 

猜你喜欢

转载自blog.csdn.net/soulsda/article/details/83687441
今日推荐