springboot_dbselect
Redis DB select
Redis Developer Course | Redis Technical Support | Redis Enterprise Server |
---|
Spring RedisTemplate
레디스 서버는 기본적으로 16개의 DB(0번 ~ 15번)를 제공합니다. redis-cli에서는 select 명령으로 DB를 이동할 수 있습니다. 그러나 Spring에서 제공하는 RedisTemplate에는 DB를 이동(선택)할 수 있는 select 메소드를 제공하지 않습니다. 그럼 어떻게 여러 DB를 사용할 수 있는지 알아보겠습니다.
- 레디스 서버에서 DB 개수 설정 방법: redis.conf 파일에서 databases로 변경할 수 있습니다. 변경 후에는 레디스 서버를 재시작해야 합니다.
- 레디스 클러스터(cluster)에서는 하나의 DB(0번)만 사용할 수 있습니다.
- Lettuce에서 제공하는 RedisClient에서는 select() 메소드로 DB를 이동(선택)할 수 있습니다. 이것에 대한 설명은 아래에 있습니다.
Project 생성: start.spring.io
Main Class: DbselectApplication
Class RedisConfig
DB를 선택할 수 있도록 dbno를 받도록 했다. redisConnectionFactory(int dbno)
@Bean을 사용하지 않는다.
DB 선택 방법
- redisConfig에서 DB를 설정: redisConfig.setDatabase(dbno);
- connectionFactory에서 DB를 선택: connectionFactory.getConnection().select(dbno);
Class RedisConfigDb0 extends RedisConfig
0번 DB를 선택하는 클래스: redisConnectionFactory(0):
return redisConnectionFactory(0);
}
@Bean(name = "stringRedisTemplateDb0") Bean 이름을 지정한다.
setConnectionFactory()로 connectionFactory를 설정한다.
- redisTemplate.setConnectionFactory(redisConnectionFactoryDb0());
- stringRedisTemplate.setConnectionFactory(redisConnectionFactoryDb0());
Class RedisConfigDb1 extends RedisConfig
1번 DB를 선택하는 클래스: redisConnectionFactory(1):
return redisConnectionFactory(1);
}
@Bean(name = "stringRedisTemplateDb1") Bean 이름을 지정한다.
setConnectionFactory()로 connectionFactory를 설정한다.
- redisTemplate.setConnectionFactory(redisConnectionFactoryDb1());
- stringRedisTemplate.setConnectionFactory(redisConnectionFactoryDb1());
Class RedisRepositoryAutowired
@Autowired를 이용한 Repository
Bean으로 지정한 이름을 사용한다.
Class RedisRepositoryParameter
생성자에 parameter(인자)를 이용한 Repository
Bean으로 지정한 이름을 사용한다.
StringRedisTemplate stringRedisTemplateDb0,
StringRedisTemplate stringRedisTemplateDb1)
Lettuce RedisClient
RedisClient에서는 select() 메소드로 DB를 이동(선택)할 수 있습니다.
레디스 서버에 연결 시에도 DB를 지정할 수 있습니다.
getRedisClient0은 0번 DB에 접속하고 getRedisClient1은 1번 DB에 접속한다. Bean name을 지정했다.
Class RedisClientConfig
Class RedisClientRepository
dbselect(int dbno): DB를 이동(선택)할 수 있다.
save(String key, String value): 0번 DB에 저장한다.
save1(String key, String value): 1번 DB에 저장한다.
Controller
Class RedisController
- @GetMapping("/save0") redisRepositoryAutowired로 DB0,1에 저장합니다.
- @GetMapping("/save1") redisRepositoryParameter로 DB0,1에 저장합니다.
- @GetMapping("/save2") redisClientRepository로 DB0,1에 저장합니다.
- @GetMapping("/save/{size}") 10개 스레드로 실행하면서 중간에
스레드1번에서 키 Thread1-500를 만나면 dbselect()를 실행해서 DB를 변경한다.
이후에는 이 스레드뿐만 아니라 다른 스레드에서도 DB10에 저장된다.
(당연하지만 확인을 위해서 테스트해보았다.)
if (key.equals("Thread1-500")) {
redisClientRepository.dbselect(10);
}
<< Async | DB Select | Spring Multi Data Source >> |
---|