Redis가 뭐고 어떤 자료구조를 지원하는지, 실제로 어디에 쓰이는지 예시와 함께 정리했습니다.
Redis란
메모리에 데이터를 저장하는 key-value 기반 NoSQL 저장소입니다. 디스크가 아니라 메모리에서 데이터를 다루기 때문에 일반 DB보다 훨씬 빠르지만, 서버가 꺼지면 데이터가 날아갈 수 있어서 "영구 저장"보다는 "빠른 조회가 필요한 데이터"에 주로 씁니다.
Redis가 지원하는 자료구조
단순 key-value만 되는 게 아니라, 여러 자료구조를 값으로 저장할 수 있다는 게 Redis의 특징입니다.
String - SET user:1 "하늘" (가장 단순한 문자열/숫자)
List - RPUSH queue:orders 1001 (순서가 있는 목록, 큐로 활용)
Set - SADD tags:post1 java redis (중복 없는 집합)
Hash - HSET user:1 name 하늘 age 30 (필드-값 여러 개를 한 키에)
ZSet - ZADD ranking 100 user1 (점수 기반 정렬된 집합, 랭킹에 활용)
같은 "숫자 100을 넣는다"도 어떤 자료구조를 쓰느냐에 따라 나중에 조회하는 방식이 완전히 달라집니다.
실제로 어디에 쓰이나
1) 캐싱
DB 조회가 반복되는 데이터를 Redis에 잠깐 저장해두고, 같은 요청이 오면 DB 대신 Redis에서 바로 꺼내줍니다.
public Product getProduct(Long id) {
String cached = redisTemplate.opsForValue().get("product:" + id);
if (cached != null) {
return deserialize(cached); // 캐시 히트: DB 안 거침
}
Product product = productRepository.findById(id); // 캐시 미스: DB 조회
redisTemplate.opsForValue().set("product:" + id, serialize(product), Duration.ofMinutes(10));
return product;
}
2) 세션 공유
서버가 여러 대일 때, 로그인 세션을 각 서버가 따로 들고 있으면 어느 서버로 요청이 가느냐에 따라 로그인 상태가 달라질 수 있습니다. Redis에 세션을 모아두면 어떤 서버가 요청을 받든 같은 로그인 정보를 확인할 수 있습니다.
3) 랭킹(리더보드)
ZSet(정렬된 집합)을 쓰면 점수 갱신과 순위 조회를 매우 빠르게 처리할 수 있습니다.
ZADD ranking 1500 "player1"
ZREVRANGE ranking 0 9 WITHSCORES -- 상위 10명 조회
4) 분산 락
여러 서버가 동시에 같은 작업(재고 차감, 중복 결제 방지 등)을 처리하지 못하도록, SET key value NX 명령으로 "먼저 온 요청만" 처리하게 막을 수 있습니다.
마무리
Redis는 "빠른 메모리 기반 저장소"라는 한 가지 특징에서, String부터 정렬된 집합까지 다양한 자료구조를 지원하면서 캐싱·세션 공유·랭킹·분산 락처럼 여러 상황에 두루 쓰이는 도구로 자리잡았습니다.
'DEV > cs' 카테고리의 다른 글
| [CS] Docker란 - 컨테이너 개념과 기본 사용법 (0) | 2026.10.01 |
|---|---|
| [CS] 애자일(Agile) 방법론이란 (1) | 2026.09.28 |
| [CS] 오버로딩 vs 오버라이딩 비교 (0) | 2026.09.27 |
| [CS] MVC 패턴이란 - 스프링부트 예시로 정리 (0) | 2026.09.26 |
| [CS] OSI 7계층이란 - 각 계층 역할 정리 (0) | 2026.09.25 |