# Redis란?
Redis(Remote Dictionary Server)는 오픈 소스 인메모리 데이터 구조 저장소로, 일반적으로 캐시, 메시지 브로커, 데이터베이스 등 다양한 용도로 사용됩니다. Redis는 데이터를 메모리에 저장하기 때문에 매우 빠르게 데이터에 접근할 수 있으며, 다양한 데이터 구조를 지원합니다. 이러한 특성 때문에, 실시간 데이터 처리, 세션 관리, 캐싱 등과 같은 고속 처리 요구 사항이 있는 애플리케이션에서 널리 사용됩니다.
왜 메모리에 데이터를 올리면 더 빠를까??
일반적인 데이터베이스는 데이터를 디스크에 저장합니다. 디스크는 메모리에 비해 읽기/쓰기 속도가 느립니다. 반면, 메모리는 휘발성이지만 매우 빠른 접근 속도를 제공합니다. Redis는 데이터를 메모리에 저장하여 디스크 I/O의 병목 현상을 피하고, 데이터의 읽기와 쓰기를 훨씬 빠르게 수행할 수 있습니다. 이러한 이유로 Redis는 대규모의 데이터 처리 성능이 요구되는 환경에서 성능을 최적화하는 데 매우 유용합니다.
#Redis 사용 방법
Redis는 캐싱 기능을 제공하여, 자주 조회되는 데이터(ex. 공지사항, 유저정보 등등)를 메모리에 저장하고 필요할 때마다 빠르게 제공할 수 있습니다. 이를 통해 데이터베이스의 부하를 줄이고, 애플리케이션의 응답 시간을 크게 향상시킬 수 있습니다.
# Redis는 어떻게 동작할까?
Redis는 일반적인 데이터베이스처럼 별도의 서버로 구성되어 실행됩니다. 즉, Redis 서버를 하나의 독립된 프로세스로 실행하고, 애플리케이션은 이 Redis 서버에 네트워크를 통해 접속하여 데이터를 읽고 쓰게 됩니다. 이렇게 함으로써, 여러 애플리케이션 인스턴스가 동일한 Redis 서버를 공유하며 캐시 데이터를 관리할 수 있습니다.
Redis 서버를 따로 띄워야 하는 이유
- 중앙화된 캐시 관리: 여러 애플리케이션 인스턴스가 동일한 Redis 서버를 사용하면, 모든 인스턴스에서 동일한 캐시 데이터에 접근할 수 있습니다. 이를 통해 일관된 캐시 관리를 할 수 있습니다.
- 성능 향상: Redis 서버는 메모리에 데이터를 저장하므로, 데이터베이스나 다른 외부 스토리지보다 훨씬 빠르게 데이터를 읽고 쓸 수 있습니다. 이로 인해 애플리케이션의 전체 성능이 향상됩니다.
- 확장성: Redis 서버를 별도로 띄움으로써, 애플리케이션의 부하가 증가해도 Redis 서버를 독립적으로 확장하거나 여러 서버로 분산하여 사용할 수 있습니다.
# 예시 코드: Spring에서 Redis 캐시 사용하기
# application.yaml
spring:
data:
redis:
host: localhost
port: 6379
cache:
type: redis
# UserService.java
@Cacheable(value = "userCache", key = "#userId")
public User findUserByUserId(String userId) throws Exception {
// Redis에서 데이터 가져오는지 확인 하는 테스트 코드
// 실제로 Redis cache에 저장되면 findUserByUserId메소드를 호출하지 않음
// 작동 방식: 메서드가 호출될 때마다 캐시를 먼저 확인 -> 캐시가 있으면 캐시된 데이터를 반환 -> 캐시에 없으면 실제 메서드를 실행한 결과를 캐시에 저장하고 반환
// Cache cache = cacheManager.getCache("userCache");
// if (cache != null && cache.get(userId) != null) {
// System.out.println("Cache hit for key: " + userId);
// } else {
// System.out.println("Cache miss for key: " + userId);
// }
return userRepository.findByUserId(userId)
.orElseThrow(() -> new Exception("User not found"));
}
이 코드는 Redis를 이용해 캐시된 데이터를 활용하는 예시입니다.
@Cacheable 어노테이션을 사용하여,
findUserByUserId
메소드가 호출될 때 Redis 캐시에서 먼저 데이터를 찾고, 캐시된 데이터가 있을 경우 메소드를 호출하지 않고 캐시된 데이터를 반환합니다. 캐시에 데이터가 없으면 메소드를 호출하고, 그 결과를 Redis 캐시에 저장합니다.
# Redis CLI를 이용한 확인 방법
Redis 서버가 제대로 동작하고, 캐시가 정상적으로 작동하는지 확인하기 위해 redis-cli.exe를 실행
명령어: KEYS *
결과 >>
'Java' 카테고리의 다른 글
[Spring] 생성자 주입이 필요한 이유 (0) | 2024.08.23 |
---|---|
[Bean, Proxy] 왜 @Cacheable이 동작하지 않을까? (0) | 2024.08.21 |
[String Boot] JWT 토큰 저장 HTTP-only Cookie (0) | 2024.08.09 |
[Spring Boot] Spring Boot란? (0) | 2024.08.05 |
[Spring] Spring이란? 정리가 잘 된 책장이다 (0) | 2024.08.02 |