-
[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기반의 프로젝트에서 의존성 부터 추가해서 시작해보겠습니다.gradleimplementation '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