반응형
Connection Pool
Spring Boot에서 Redis를 사용할 때 기본적으로 lazy connection을 사용합니다.
즉, Redis에 대한 최초 연결이 있을 때 뒤늦게 Connection Pool을 가져오는 방식입니다.
@RestController
public class RedisWarmupController {
@Autowired
private RedisConnectionFactory redisConnectionFactory;
@Autowired
private StringRedisTemplate redisTemplate;
@GetMapping("/redis-test")
public String testRedisConnection() {
long start = System.currentTimeMillis();
redisTemplate.opsForValue().set("key", "value");
String value = redisTemplate.opsForValue().get("key");
long end = System.currentTimeMillis();
return "Redis call took " + (end - start) + " ms. Value: " + value;
}
}
총 261ms가 소요되었습니다.
@PostConstruct
public void init() {
redisConnectionFactory.getConnection(); // 즉시 연결 초기화
}
Spring Boot가 시작 될 때 Connection Pool을 가져오는 방식으로 바꾸면 속도가 빠릅니다.
그렇다고 항상 Eager하게 가져오는 것은 좋지 않습니다.
당장 사용을 하지 않을 수도 있기 때문에 미리 올려두면 리소스가 낭비되고 오히려 Spring Boot의 기동 시간이 느려지게 됩니다.
초기 연결 수립
위의 결과에서 한번 더 요청을 하면 아래와 같이 속도가 더 빨라지는 것을 볼 수 있습니다.
한번 get 메소드를 처리하고나면 속도가 빨라진다는 것인데요.
이를 활용해서 Spring Boot가 시작될 때 미리 조회를 해볼 수도 있습니다.
@PostConstruct
public void init() {
redisTemplate.opsForValue().get("key");
}
아마 redis Server와의 핸드쉐이크를 연결 하는 과정 혹은 Redis Serializer를 캐쉬하는 과정에서 초기 연결 속도가 늦는 것으로 판단됩니다.(검색해도 잘 안나오는데 아시는 분 알려주세요.)
728x90
'🍃 Spring' 카테고리의 다른 글
[Spring] RFC 7232 - Conditional Requests로 비용 및 부하 최적화 하기 (0) | 2025.01.21 |
---|---|
[Spring] gRPC 사용법 (0) | 2025.01.20 |
[Spring] 동시성(Concurrency) 이슈 - 그 외(3) (0) | 2024.11.05 |
[Spring] 동시성(Concurrency) 이슈 - Database(2) (3) | 2024.10.25 |
[Spring] 동시성(Concurrency) 이슈 - 변수(1) (2) | 2024.10.25 |