redis 进行session共享


一.流程图   操作步骤 1.引入jar包
      
            org.springframework.boot
            spring-boot-starter-redis
            1.4.7.RELEASE
        
        
            org.springframework.session
            spring-session-data-redis
            2.1.6.RELEASE
        
2.创建springsession,springredis配置类,添加启用session的注解  
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.*;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 * maxInactiveIntervalInSeconds配置是设置session的最大存活时间,默认是1800秒.
 * redis有三种模式-standalone,sentinel,cluster,
 */
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)
public class SpringRedisSessionConfig{

    private String redisHost = "127.0.0.1";
    private Integer port = 6379;

    @Bean("redisStandaloneConnectionFactory")
    public RedisConnectionFactory redisStandaloneMasterConnectionFactory() {
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(redisHost, port);
        RedisConnectionFactory lettuceConnectionFactory = new JedisConnectionFactory(redisStandaloneConfiguration);
        return lettuceConnectionFactory;
    }

    /**
     * sentinel模式的通道提供
     * @return
     */
//    @Bean("redisSentinelctionFactory")
//    public RedisConnectionFactory redisSentinelctionFactory() {
//        RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration()
//                .master("mymaster")
//                .sentinel("10.70.33.238", 26379)
//                .sentinel("10.70.33.239", 26379)
//                .sentinel("10.70.33.246", 26379);
//        return new JedisConnectionFactory(redisSentinelConfiguration);
//    }

    /**
     * cluster模式的通道提供
     * @return
     */
//    @Bean("redisRedisClusterFactory")
//    public RedisConnectionFactory redisSentinelctionFactory() {
//        RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration()
//        RedisNode redisNode1 = new RedisNode("127.0.0.1", 6379);    // 有多少个节点就写多少个节点
//        RedisNode redisNode2 = new RedisNode("127.0.0.1", 6379);
//        redisClusterConfiguration.addClusterNode(redisNode1);
//        redisClusterConfiguration.addClusterNode(redisNode2);
//        return new JedisConnectionFactory(redisClusterConfiguration);
//    }

    // 配置resdTemplate 
    @Bean("redisTemplate")
    public RedisTemplate redisTemplate(@Qualifier("redisStandaloneConnectionFactory") RedisConnectionFactory factory) {
        RedisTemplate redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(factory);
        return redisTemplate;
    }
}
  3. 将自定义配置SpringRedisSessionConfig注册给spring的AbstractHttpSessionApplicationInitializer管理
/**
 * 为了使每个serverlet容器都使用 spring 提供的 springSessionRepositoryFilter 过滤器创建此类.
 * 上述过滤器,作用是用Spring会话支持的自定义实现替换HttpSession
 * @author 愉快淡定
 */
public class ForSpringSessionRepositoryFilter extends AbstractHttpSessionApplicationInitializer {
    public ForSpringSessionRepositoryFilter() {
        super(SpringRedisSessionConfig.class);   //前面写的配置类
    }
}
    5.启动测试         6.使用redisTemplate
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RequestMapping
@RestController
public class Demo01Controller {

    @Resource
    private RedisTemplate redisTemplate;

    @GetMapping("/a")
    public String test() {
        redisTemplate.opsForValue().set("aa", "abcdefghijklmnopqrstuvwxyz");
        final Object aa = redisTemplate.opsForValue().get("aa");
        System.out.println("aa = " + aa);
        return (String) aa;
    }
}