
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 |