코딩마을방범대
Redis - (6) Java에서 Redis 사용하기(Repository) 본문
728x90
Redis - (2) 우분투 서버에 Redis 세팅하기
Redis - (4) Java에서 Redis 사용하기(Jedis)
Redis - (5) Java에서 Redis 사용하기(Lettuce)
5에서는 RedisTemplate를 통해 직접 Redis에 접근했다면
이번엔 RedisTemplate를 통해 RedisRepository에서 접근해서 사용하는 방식이다.
build.gradle
implementation('org.springframework.boot:spring-boot-starter-data-redis')
application.yml
!! 트랜잭션을 사용하지 않는 경우 pool 옵션은 줄 필요 없음 !!
spring:
redis:
# 레디스 서버 주소 (local일 경우 localhost)
host: ip주소
# 비밀번호
password: 비밀번호
# 레디스 서버 포트
port: 포트번호
# 커넥션 타임아웃 (단위 밀리세컨드)
timeout: 1000
pool:
# 풀에서 관리하는 idle 커넥션의 쵀소수 대상 (양수일 때만 유효)
max-idle: 8
# 풀에서 관리하는 idle 커넥션의 최소수 대상 (양수일 때만 유효)
min-idle: 0
# pool에 할당될 수 있는 커넥션 최대수 (음수로 하면 무제한)
max-active: 8
# pool이 바닥났을 때 예외 발생 전, 커넥션 할당 차단 최대 시간(단위 밀리세컨드, 음수는 무제한 차단)
max-wait: -1
RedisProperties
@Data
@ConfigurationProperties(prefix = "spring.redis")
@Component
public class RedisProperties {
private String host;
private int port;
private String password;
}
Configuration
spring-boot 2.2 버전 이상부터는 autoConfiguration에 의해 restTemplate과 redisConnectionFactory가 자동 생성된다.
(redis template Bean 4개)
redisTemplate와 stringRedisTemplate의 차이는 Serializer(직렬화)
redisTemplate는 JdkSerializationRedisSerializer방식
stringRedisTemplate는 StringRedisSerializer방식
@Configuration
@RequiredArgsConstructor
public class RedisConfiguration {
private final RedisProperties redisProperties;
private String host;
private int port;
private String password;
@PostConstruct
protected void init() {
host = redisProperties.getHost();
port = redisProperties.getPort();
password = redisProperties.getPassword();
}
// TCP 통신
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
// 패스워드 있을 경우
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(host);
redisStandaloneConfiguration.setPort(port);
redisStandaloneConfiguration.setPassword(password);
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration);
return lettuceConnectionFactory;
// 패스워드 없을 경우
return new LettuceConnectionFactory(new RedisStandaloneConfiguration(host, port));
}
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
}
직렬화 : Java 내부의 데이터들을 외부에서 사용 가능하도록 바이트 형태로 데이터를 변환하는 기술
역직렬화 : 바이트 데이터를 원래 Object로 변환하는 기술
LettuceConnectionFactory
- Lettuce로 Redis와의 연결을 진행
- Redis의 주소와 포트를 파라미터로 넣어줌
RedisTemplate
- 데이터의 추가 조회 작업 수행
Model
@Getter
@RedisHash("people")
public class Person {
@Id
String id;
String firstname;
String lastname;
Address address;
@Builder
public Person(String id, String firstname, String lastname, Address address) {
this.id = id;
this.firstname = firstname;
this.lastname = lastname;
this.address = address;
}
}
@Getter
public class Address {
private String address;
public Address(String address) {
this.address = address;
}
}
Repository
public interface PersonRedisRepository extends CrudRepository<Person, String> {
}
사용
@Service
@RequiredArgsConstructor
public class RedisTest {
private final PersonRedisRepository redisRepository;
public void redisTest(){
Address address = new Address("서울특별시 서울시청");
Person person = new Person(null, "fisrt", "last", address);
Person savedPerson = redisRepository.save(person);
}
}
위와 같이 사용하여 저장 시
people이라는 set 타입과 people:id라는 hash 타입이 저장됩니다.
1. people ( set타입 ) 조회 시
Person 객체의 id를 null 값으로 주었기 때문에 redis의 랜덤값이 id로 지정됨
> smembers people
2. people:id ( hash타입 ) 조회 시
Person 객체에서 지정한 필드들이 key값으로 나옴
> hkeys people:id
Person 객체의 값들이 출력됨
> hvals people:id
참고사이트
[Java + Redis] Spring Data Redis로 Redis와 연동하기 - RedisRepository 편
728x90
'💡 백엔드 > Redis' 카테고리의 다른 글
Redis를 구축하며 발생한 오류들 (0) | 2023.06.29 |
---|---|
Redis - (7) Redis 데이터 다루기 (RDB/AOF) (0) | 2023.06.20 |
Redis - (5) Java에서 Redis 사용하기(Lettuce) (0) | 2023.06.19 |
Redis - (4) Java에서 Redis 사용하기(Jedis) (0) | 2023.06.19 |
Redis - (3) CLI 접근 및 데이터 조회하기 (0) | 2023.06.13 |