728x90
반응형
스프링부트에서 여러 개의 Redis 서버를 사용하는 방법이다!
(필자는 여러 개의 Redis 서버를 사용해 jwt토큰 서버, 인기검색어 서버를 분리하는 작업을 하고 있었다.)
개발 환경
- aws ec2
- redis
- spring boot
- java 11
1. EC2 설정 (리눅스 서버 설정)
0. 기존 redis.conf 파일
원래 돌아가고 있던 redis.conf 파일의 경로를 찾는다.
1. 기존 redis.conf 파일 복사
기존 redis.conf 파일을 복사 후 이름을 변경한다. (redis2.conf)
2. 복사 파일 설정 변경
복사한 파일의 포트 번호를 변경한다.(6379 -> 6380)
로그 파일 경로도 변경해준다.
3. 복사한 redis 파일 실행
$ redis-server [복사파일 경로]
2. Spring boot 설정
0. 메소드 이름은 무조건 다르게
필자는 작업 중 메소드 이름을 같게 하고 기능을 다르게 해서 구현했었는데 6380 포트로 들어가야하는 데이터가 6379로 들어가는 이슈가 생겼다.
한참을 고민하다 스프링이 같은 Bean으로 인식해 하나로 인식하는 것을 알게 되었다. 이름은 꼭 다르게 하자!
1. Redis Factory 분리
// host : ec2 엔드포인트 , port : redis 포트 번호
@Bean
public RedisConnectionFactory redisConnectionFactoryOne() {
return new LettuceConnectionFactory(new RedisStandaloneConfiguration("host1", port1));
}
@Bean
public RedisConnectionFactory redisConnectionFactoryTwo() {
return new LettuceConnectionFactory(new RedisStandaloneConfiguration("host2", port2));
}
2. Redis Template 분리
@Bean
public RedisTemplate<String, String> redisTemplateOne() {
RedisTemplate<String, String> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactoryOne());
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new StringRedisSerializer());
return template;
}
@Bean
public RedisTemplate<String, String> redisTemplateTwo() {
RedisTemplate<String, String> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactoryTwo());
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new StringRedisSerializer());
return template;
}
여기서 중요한 점! 위에서 정의한 각각의 Factory를 넣어주어야 한다!
3. Redis Template Bean 주입
@Service
public class MyService {
private final RedisTemplate<String, String> redisTemplateOne;
private final RedisTemplate<String, String> redisTemplateTwo;
public MyService(
@Qualifier("redisTemplateOne") RedisTemplate<String, String> redisTemplateOne,
@Qualifier("redisTemplateTwo") RedisTemplate<String, String> redisTemplateTwo) {
this.redisTemplateOne = redisTemplateOne;
this.redisTemplateTwo = redisTemplateTwo;
}
// Use redisTemplateOne and redisTemplateTwo to interact with the corresponding Redis instances
}
@Qualifier 를 통해 템플릿을 구분해 사용하면 된다.
이렇게 여러개의 redis server를 하나의 ec2 인스턴스에서 사용할 수 있다!
728x90
반응형
'Tech > Server' 카테고리의 다른 글
[Linux] Sudo: unable to resolve host explained 발생 시 해결 방법 (0) | 2023.04.18 |
---|---|
[아키텍처] 계층형, MVC, 마이크로서비스, 헥사고날 아키텍처, 장단점 (0) | 2023.04.02 |
[Spring, Redis] AWS EC2환경 spring boot에서 redis 연결방법, 연결 안될때 (connection refused) (0) | 2023.02.08 |
[DB 구축] AWS RDS 구축하기 (MySQL) (0) | 2022.04.08 |
[리눅스 환경 Server 개발] Let's Encrypt로 HTTP HTTPS로 변환하기 (0) | 2022.03.31 |