-
[Spring] Spring Data Redis로 자료구조 사용해보기Server/Spring 2021. 8. 10. 22:59728x90반응형
Spring Data Redis로 자료구조 다루어 보기
Redis 는 간단하게 말하면
Key
-Value
형태의 영속성을 지원하는 인메모리 데이터 저장소입니다. 이번 글에서는Spring Data Redis
를 활용해서List
,Set
,Sorted Set
,Map
을 사용해서 데이터를 저장하고 조회하는 것에 대해서 정리해보겠습니다.먼저
Spring Boot gradle
기반의 프로젝트에서 의존성 부터 추가해서 시작해보겠습니다.gradle
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
위의
Spring-data-redis
의존성을 추가하겠습니다. 이제 Redis 설정을 해보겠습니다.Redis 설정
@Configuration public class RedisConfig { @Bean public RedisConnectionFactory redisConnectionFactory() { return new LettuceConnectionFactory(); // Lettuce 사용 } @Bean public RedisTemplate<String, Object> redisTemplate() { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory()); redisTemplate.setKeySerializer(new StringRedisSerializer()); // Key: String redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(String.class)); // Value: 직렬화에 사용할 Object 사용하기 return redisTemplate; } }
먼저
RedisConnectionFactory
인터페이스 하위 클래스에는LettuceConnectionFactory
,JedisConnectionFactory
두 가지가 존재합니다.Lettuce
와Jedis
둘 다 정말 유명한 것이지만 Jedis 보단 Lettuce를 쓰자 의 글을 보면 Lettuce의 성능이 좀 더 좋은 것을 볼 수 있기에 저는Lettuce
를 사용하겠습니다.그리고 다음에
RedisTemplate
이 나오는데요.RedisTemplate
은 Redis 서버에 Redis 커맨드를 수행하기 위한high-level-abstractions
을 제공합니다. 또한Object 직렬화
,Connection management
를 수행합니다.
또한 Redis 서버에 데이터 CRUD를 위해, Redis의 다섯가지 데이터 유형에 대한Operation Interface
를 제공합니다.메소드명 반환 오퍼레이션 Redis 자료구조 opsForValue() ValueOperations String opsForList() ListOperations List opsForSet() SetOperations Set opsForZSet() ZSetOperations Sorted Set opsForHash() HashOperations Hash - RedisTemplate: RedisTemplate은 Thread-Safe 하며 재사용이 가능합니다.
- JacksonJsonSerializer: JSON 포맷으로 데이터를 저장하는 경우
이렇게 RedisTemplate과 이것을 사용하기 위한
Operation Interface
들에 대하여 알아보았습니다. 이제 실제로List
,Set
,Sorted Set
,Hash
를 Redis에 저장하는 것을 코드로 예제를 진행해보겠습니다.Redis List Type 예제
private final RedisTemplate<String, Object> redisTemplate; redisTemplate.opsForList().rightPush("key", "value"); RedisOperations<String, Object> operations = redisTemplate.opsForList().getOperations(); System.out.println(operations.opsForList().range("chatNumber" + idx, 0, -1)); // Redis Data List 출력
위와 같이 Redis에
Key
:List
형태로 저장을 할 수 있습니다. 그리고 range 메소드를 통해서 List의 Start, end 인덱스를 통하여 가져올 수도 있습니다.Redis Set Type 예제
private final RedisTemplate<String, Object> redisTemplate; SetOperations<String, Object> setOperations = redisTemplate.opsForSet(); setOperations.add("Key", chatMessage); System.out.println(setOperations.pop("Key")); // 하나 꺼내기 System.out.println(setOperations.members("Key")); // 전체 조회
Set은 add, pop 메소드를 사용하여 저장, 조회를 합니다.
Redis Sorted Set Type 예제
private final RedisTemplate<String, Object> redisTemplate; ZSetOperations<String, Object> zSetOperations = redisTemplate.opsForZSet(); zSetOperations.add("Key", "Value", score); System.out.println(zSetOperations.range("ZKey", 0, -1));
위와 같이
Sorted Set
도 손 쉽게 사용할 수 있습니다.Redis Hash Type 예제
메모리 공간을 작게 차지함으로, 수백만개의 오브젝트를 하나의 Redis 인스턴스에 저장 가능합니다.
HashOperations<String, Object, Object> hashOperations = redisTemplate.opsForHash(); Map<String, Object> map = new HashMap<>(); map.put("firstName", "Gyunny"); map.put("lastName", "Choi"); map.put("gender", "Man"); hashOperations.putAll("key", map); String firstName = (String) redisTemplate.opsForHash().get("key", "firstName"); String lastName = (String) redisTemplate.opsForHash().get("key", "lastName"); String gender = (String) redisTemplate.opsForHash().get("key", "gender"); System.out.println(firstName); System.out.println(lastName); System.out.println(gender);
이렇게 Redis의 여러 가지 자료구조를 사용하여 데이터를 저장하고 조회하는 기능들에 살펴보았습니다.
반응형'Server > Spring' 카테고리의 다른 글
[Spring] Kotlin으로 ModelMapper 사용하는 방법 (2) 2021.08.25 [Spring] H2 Database 연결 에러 해결하기 (0) 2021.08.24 [Spring] Filter와 Inteceptor 란 무엇일까? (0) 2021.06.30 [Spring] Bean LifeCycle 이란 무엇일까? (5) 2021.04.29 [Spring] Spring 에서 의존성 주입이란 무엇일까? (0) 2021.04.29