레디스를 이용한 세션 클러스터링의 구성도
https://github.com/microsoftarchive/redis/releases 해당 링크에서 zip 파일을 받아서 conf 파일을 각자의 설정에 맞게 수정 후 서비스로 등록 후 시작해주면 된다.
기본포트는 6379번이고 포트를 포함한 설정정보를 수정하려면 redis.windows.conf 파일을 수정하면 된다.
서비스를 등록하고 redis 서비스를 시작한다.
redis-server --service-install redis.windows.conf --loglevel verbose
redis-server --service-start
cli로 접속하여 정상적으로 접속이 되는지 확인(아직 springboot에 redis 설정을 하지 않았으므로 아무것도 없다)
redis-cli
127.0.0.1:6379>
127.0.0.1:6379> keys *
(empty list or set)
compile('org.springframework.session:spring-session-data-redis
)
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 60)
public class RedisHttpSessionConfiguration extends AbstractHttpSessionApplicationInitializer {
public RedisHttpSesfgsionConfiguration(){
super(RedisHttpSessionConfiguration.class);
}
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private Integer port;
@Value("${spring.redis.password}")
private String password;
@Autowired
private ObjectMapper mapper;
@Bean
public RedisConnectionFactory lettuceConnectionFactory(){
RedisStandaloneConfiguration standaloneConfiguration = new RedisStandaloneConfiguration(host, port);
standaloneConfiguration.setPassword(password.isEmpty() ? RedisPassword.none() : RedisPassword.of(password));
return new LettuceConnectionFactory(standaloneConfiguration);
}
@Bean
public RedisTemplate<String, Object> redisTemplate(){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(lettuceConnectionFactory());
redisTemplate.setEnableTransactionSupport(true);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer(mapper));
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
spring:
redis:
host: localhost
port: 6379
password: ''
session:
store-type: redis
redis:
flush-mode: on_save
- 스프링 레디스 세션을 이용할때 세션데이터를 레디스에 저장한다.
- 세션에 대한 만료시간을 30분(1800초)로 설정하면, 세션만료키 (spring:session:session:expires:{session-id})의 만료시간에 1800000 millisecond가 설정된다.
- 30분(1800초) + 5분(300초) = 2100000 millisecond가 세션키(spring:session:sessions:{session-id})의 만료시간에 설정된다.
- 세션의 만료시간에 차이가 있는 이유는 세션만료키 값을 설정한 30분이내에 삭제하는 그 순간에도 세션의 세부정보가 필요하다. (세션에 접근할 일이 그 찰나에도 존재할 수 있기 때문) 그렇기 때문에 5분의 추가시간이 더해진 것이다.
- (앱에서 설정한 만료시간)은 레디스가 세션만료키를 만료하는 시간: 앱에서는 해당 값을 가지고 세션 유무 확인
- (앱에서 설정한 만료시간 + 5분)은 레디스가 세션키를 만료하는 시간