개발 공부는 어려워
article thumbnail
반응형

1.  

2. Redis를 Spring Boot에서 사용하는 방법은 어렵지 않다.

 

<java />
/** Redis **/ implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'redis.clients:jedis:3.7.1'

 

먼저 application에 있는 build.gradle 파일에 해당 내용을 작성한다..

 

그 이후 기본 application.properties 파일에 작성한 포트와 ip를 넣어줘야 하는데 나는 application.yml 파일이기 때문에

<java />
#redis data: redis: host: localhost port: 6379

 

위와 같이 설정해주었다.

 

Redis를 사용하는 방법은 여러가지가 존재하는데

 

내가 선택한 방법은 JPA와 Lettuce, 그리고 RedisTemplate를 사용하는 방법이다.

 

먼저 lettuce를 사용하는 방법은 

 

<java />
@Configuration public class RedisConfig { @Value("${spring.data.redis.host}") // application.yml에서 설정한 ip private String host; @Value("${spring.data.redis.port}") // application.yml에서 설정한 port private int port; @Bean public RedisConnectionFactory redisConnectionFactory() { return new LettuceConnectionFactory(host, port); } }

 

RedisConnectionFactory를 return 해주는 Bean을 생성해주는 configuration class를 생성하고

 

<java />
@Getter @ToString public class RedisVo { @Id private String id; private String authCode; public RedisVo(String id, String authCode) { this.id = id; this.authCode = authCode; } }

 

Redis 서버와 연동하는 Vo class를 생성한다. 여기에서 @Id를 사용한 변수는 redis에서 Key가 된다.

 

또한 RedisVo class 위에 @RedisHash라는 어노테이션을 사용하여 value와 그 value의 값을 넣어줄 수 있으며 timeToLive라는 설정을 주어 초딘위로 유효기간을 설정 할 수 있다. 이전 포스팅에 있는 setex와 동일한 개념이다.

 

마지막으로 jpa를 사용하는 interface를 생성해준다.

 

<java />
public interface RedisRepository extends CrudRepository<RedisVo, String> { }

 

이렇게 설정을 한 이후에

<java />
@SpringBootTest @Slf4j class RedisTest { @Autowired private RedisRepository repo; @Test @DisplayName("JPA 사용 테스트 코드") void redisTest() { RandomCode randomCode = new RandomCode(); log.info("random={}", randomCode.createCode()); RedisVo vo = new RedisVo("jh950925", randomCode.createCode()); log.info("============================================================="); log.info("vo={}",vo.toString()); // 저장 repo.save(vo); log.info("repo={}",repo); // Id값 가져옴 repo.findById(vo.getId()); log.info("repo.findById={}",repo); // vo안의 @RedisHash에 정의되어 있는 키의 갯수를 구함 repo.count(); log.info("============================================================="); // 삭제 //repo.delete(vo); } }

 

이렇게 테스트 코드를 작성 한 이후 결과를 확인하면 

 

로그에서는 결과를 확인할 수 있고

 

redis에서도

 

결과를 확인할 수 있다.

 


만약 JPA를 사용하지 않고 RedisTemplate를 사용한다면 

 

아까 생성했던 configuration class에서

<java />
@Configuration public class RedisConfig { @Value("${spring.data.redis.host}") private String host; @Value("${spring.data.redis.port}") private int port; @Bean public RedisConnectionFactory redisConnectionFactory() { return new LettuceConnectionFactory(host, port); } // RedisTemplate 빈을 정의합니다. // RedisTemplate은 Redis와의 데이터 작업을 위한 중심 클래스로, 여러 가지 데이터 조작 메서드를 제공합니다. @Bean public RedisTemplate<byte[], byte[]> redisTemplate() { // RedisTemplate 객체를 생성합니다. 이 객체는 Redis와의 상호작용을 수행합니다. RedisTemplate<byte[], byte[]> redisTemplate = new RedisTemplate<>(); // 생성된 RedisTemplate 객체에 RedisConnectionFactory를 설정합니다. // 이를 통해 RedisTemplate은 Lettuce 클라이언트를 사용하여 Redis와 연결을 관리합니다. redisTemplate.setConnectionFactory(redisConnectionFactory()); // 키 직렬화를 위한 StringRedisSerializer를 설정합니다. // 이를 통해 Redis에 저장되는 모든 키는 문자열로 직렬화됩니다. redisTemplate.setKeySerializer(new StringRedisSerializer()); // RedisTemplate 빈을 반환합니다. return redisTemplate; } }

 

RedisTemplate를 사용하는 Bean을 생성해주고

 

해당 빈을 사용하는

<java />
@SpringBootTest @Slf4j class RedisTest { @Autowired private RedisRepository repo; @Autowired private RedisTemplate<String, String> redisTemplate; @Test @DisplayName("JPA 사용 테스트 코드") void redisTest() { RandomCode randomCode = new RandomCode(); log.info("random={}", randomCode.createCode()); RedisVo vo = new RedisVo("jh950925", randomCode.createCode()); log.info("============================================================="); log.info("vo={}",vo.toString()); // 저장 repo.save(vo); log.info("repo={}",repo); // Id값 가져옴 repo.findById(vo.getId()); log.info("repo.findById={}",repo); // vo안의 @RedisHash에 정의되어 있는 키의 갯수를 구함 repo.count(); log.info("============================================================="); // 삭제 // repo.delete(vo); } @Test @DisplayName("redisTemplate 사용 테스트 코드") public void testRedisTemplate() { // ValueOperations 객체를 통해 Redis와 상호작용 ValueOperations<String, String> valueOps = redisTemplate.opsForValue(); // Redis에 데이터 저장 String key = "testKey"; String value = "testValue"; valueOps.set(key, value); // 데이터 조회 String retrievedValue = valueOps.get(key); assertThat(retrievedValue).isEqualTo(value); log.info("retrievedValue = {}", retrievedValue); // 데이터 삭제 redisTemplate.delete(key); String deletedValue = valueOps.get(key); assertThat(deletedValue).isNull(); } }

 

테스트 코드를 작성한다. 

 

이 테스트 코드를 확인하면 

 

위 코드에서 testKey라는 값을 set해주고 다시 그 값 기준해서 get을 하여 retrievedValue = testValue 이런 값이

로그에 출력되는것을 확인할 수 있다. 

 

Redis에서도 확인해보면

값이 잘 저장된것을 확인할 수 있다.

반응형

'study > etc' 카테고리의 다른 글

Redis 명령어 정리  (0) 2024.06.12
Redis Window에서 설치하기  (0) 2024.06.11
Redis는?  (0) 2024.06.11
profile

개발 공부는 어려워

@신입개발자하랑이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!