Redis는 Remote Dictionary Server의 약자로, Java의 Map과 같은 Key-Value Store 방식으로 데이터를 저장하는 NoSQL 데이터베이스입니다.
redis/redis-stack-server 이미지를 사용하면(docker로 설치시) 확률형 데이터, JSON 문서, 그래프 등의 확장 기능을 활용할 수 있습니다. Spring Boot에서는 Spring Data Redis를 활용하여 Redis를 쉽게 사용할 수 있습니다.
Spring Data JPA의 JpaRepository처럼, RedisRepository를 사용하면 자동으로 Redis에 데이터를 저장, 조회, 삭제할 수 있습니다.
간단한 CRUD 작업을 수행하는 데 적합합니다.
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends CrudRepository<User, String> {
}
User 엔티티를 Redis에 저장하고, Key 값으로 String 타입의 ID를 사용합니다.CrudRepository처럼 간단한 CRUD 작업을 수행할 수 있습니다.보다 세부적인 Redis 작업을 수행하려면 RedisTemplate을 활용할 수 있습니다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, String> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new StringRedisSerializer());
return template;
}
}
RedisConnectionFactory를 사용하여 Redis와 연결 StringRedisSerializer를 사용하여 Key, Value를 문자열로 직렬화 import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
@Service
public class UserService {
private final RedisTemplate<String, String> redisTemplate;
public UserService(RedisTemplate<String, String> redisTemplate) {
this.redisTemplate = redisTemplate;
}
public void saveUser(String userId, String name) {
redisTemplate.opsForValue().set(userId, name);
}
public String getUser(String userId) {
return redisTemplate.opsForValue().get(userId);
}
}
opsForValue()를 사용해 Key-Value 저장 및 조회opsForHash(), opsForList(), opsForSet() 등을 활용해 다양한 자료형 지원Redis는 Key-Value 구조를 기반으로 다양한 자료형을 제공합니다.
아래는 주요 자료형과 활용 예시입니다.
| 자료형 | 설명 | 주요 명령어 | 활용 예시 |
|---|---|---|---|
| String | 문자열 저장 | SET, GET, INCRBY | 세션 정보, 캐시 |
| Hash | Key 안에 필드-값 저장 | HSET, HGET, HDEL | 사용자 정보 저장 |
| List | 순서가 있는 리스트 | LPUSH, RPUSH, LPOP | 채팅 메시지 |
| Set | 중복 없는 집합 | SADD, SREM, SMEMBERS | 태그, 팔로우 시스템 |
| Sorted Set | 점수 기반 정렬된 집합 | ZADD, ZINCRBY, ZRANGE | 랭킹 시스템 |
🔹 예제: 인기 게시글 랭킹
ZINCRBY articles:ranks 1 articles:1 # articles:1의 점수를 1 증가
ZREVRANGE articles:ranks 0 9 WITHSCORES # 상위 10개 인기 게시글 조회
ZINCRBY를 사용하여 점수 업데이트 ✅ 캐싱 (Session 저장, API 응답 캐싱)
✅ 인기 게시글 랭킹 시스템 (Sorted Set 활용)
✅ 채팅 시스템 (List 활용)
✅ 실시간 투표 시스템 (ZINCRBY 활용)