728x90
반응형
SMALL
안녕하세요! 프뚜입니다.
Redis는 Single Thread 아키텍처입니다. 블로킹의 영향으로 성능이 저하되고 장애가 발생할 수 있으므로 프로덕션 환경에서는 절대 사용하지 말아야한다고 알려져 있습니다.
Redis > Keys는 Global Pattern으로 간단하게 모든 Key를 조회할 수 있고, 40ms 내에 100만 개의 key가 존재하는 데이터베이스를 스캔할 수 있다고 합니다. 하지만, 명령이 실행되는 도중에는 다른 모든 명령의 실행이 블로킹된다는 점 입니다.
Redis > Scan은 non-blocking으로 비교적 안전하게 사용할 수 있습니다. 작은 단위로 증분 반복 순회를 하면서 데이터베이스를 스캔하기 때문입니다.
[개발 환경]
- OS: Windows 10 64bit
- JAVA: 1.8
1. keys 함수 사용하기
// 2022.12.05[프뚜]: 전체 데이터를 keys로 꺼냄
Set<String> list = redisTemplate.keys("*");
Iterator<String> ite = list.iterator();
while (ite.hasNext()) {
String next = ite.next();
System.out.println(next);
}
keys함수의 pattern을 통해 전체(*)데이터를 스캔합니다. keys는 blocking이기 때문에 데이터가 많을수록 성능이 저하되고 장애가 발생할 수 있습니다.
2. scan 함수 사용하기
// 2022.12.05[프뚜]: 전체 데이터를 scan으로 꺼냄
ScanOptions options = ScanOptions.scanOptions().match("*").count(5000).build();
Cursor<String> cursor = redisTemplate.scan(options);
while (cursor.hasNext()) {
String next = cursor.next();
System.out.println(next);
}
scan함수는 정해진 단위(count)로 증분 반복 순회를 하면서 데이터를 스캔합니다. non-blocking이므로 비교적 장애가 발생하지 않습니다. (단위를 지정하지 않으면 기본 값 10으로 설정되어있습니다.)
자세한 내용은 소스코드를 통해 확인해보실 수 있습니다. (제목과 Git Comment는 같습니다.)
728x90
반응형
LIST
'프로그램 > JAVA' 카테고리의 다른 글
[JWT] Spring Interceptor 세팅 및 사용하기 (2) | 2022.12.28 |
---|---|
[JAVA] SpringBoot에서 JWT 설정 및 사용하기 (JJWT) (2) | 2022.12.27 |
[ELK] SpringBoot + ELK 연동 및 사용하기 (0) | 2022.11.25 |
[SolrJ] spring boot + solrj 연동 및 사용하기 (0) | 2022.11.24 |
[Spring] Redis Jedis에서 Lettuce로 변경하기(Lettuce Config 세팅) (2) | 2022.11.17 |