1. 개요

이 예제은 인기 있는 메모리 내 데이터 구조 저장소인 Redis 에 Spring Data 플랫폼의 추상화를 제공하는 Spring Data Redis에 대한 소개 입니다.

Redis는 데이터를 유지하기 위해 키 저장소 기반 데이터 구조로 구동되며 데이터베이스, 캐시, 메시지 브로커 등으로 사용할 수 있습니다.

모든 Spring Data 프로젝트의 전통적인 단순성을 유지하면서 Spring Data(템플릿 등)의 공통 패턴을 사용할 수 있습니다.

2. 메이븐 의존성

pom.xml 에서 Spring Data Redis 의존성을 선언하는 것으로 시작하겠습니다 .

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>2.3.3.RELEASE</version>
 </dependency>

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.3.0</version>
    <type>jar</type>
</dependency>

최신 버전의 spring-data-redisjedis 는 Maven Central에서 다운로드할 수 있습니다.

또는 Redis용 Spring Boot 스타터를 사용할 수 있습니다. 그러면 별도의 스프링 데이터jedis 의존성이 필요하지 않습니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.7.2</version>
</dependency>

다시 말하지만 Maven Central 은 최신 버전 정보를 제공합니다.

3. Redis 구성

애플리케이션 클라이언트와 Redis 서버 인스턴스 간의 연결 설정을 정의하려면 Redis 클라이언트를 사용해야 합니다.

Java에 사용할 수 있는 여러 Redis 클라이언트 구현이 있습니다. 이 예제에서는 간단하고 강력한 Redis 클라이언트 구현인 Jedis 를 사용 합니다.

프레임워크에서 XML 및 Java 구성을 모두 잘 지원합니다. 이 사용방법(예제)에서는 Java 기반 구성을 사용합니다.

3.1. 자바 구성

구성 bean 정의부터 시작하겠습니다.

@Bean
JedisConnectionFactory jedisConnectionFactory() {
    return new JedisConnectionFactory();
}

@Bean
public RedisTemplate<String, Object> redisTemplate() {
    RedisTemplate<String, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(jedisConnectionFactory());
    return template;
}

구성은 매우 간단합니다.

먼저 Jedis 클라이언트를 사용하여 connectionFactory 를 정의합니다 .

그런 다음 jedisConnectionFactory 를 사용하여 RedisTemplate 을 정의 했습니다 . 이는 사용자 지정 리포지토리로 데이터를 쿼리하는 데 사용할 수 있습니다.

3.2. 사용자 지정 연결 속성

위의 구성에는 일반적인 연결 관련 속성이 없습니다. 예를 들어 구성에서 서버 주소와 포트가 누락되었습니다. 이유는 간단합니다. 기본값을 사용하고 있기 때문입니다.

그러나 연결 세부 정보를 구성해야 하는 경우 언제든지 jedisConnectionFactory 구성 을 수정할 수 있습니다.

@Bean
JedisConnectionFactory jedisConnectionFactory() {
    JedisConnectionFactory jedisConFactory
      = new JedisConnectionFactory();
    jedisConFactory.setHostName("localhost");
    jedisConFactory.setPort(6379);
    return jedisConFactory;
}

4. 레디스 저장소

Student 엔터티 를 사용합시다 .

@RedisHash("Student")
public class Student implements Serializable {
  
    public enum Gender { 
        MALE, FEMALE
    }

    private String id;
    private String name;
    private Gender gender;
    private int grade;
    // ...
}

4.1. 스프링 데이터 저장소

이제 StudentRepository 를 생성해 보겠습니다 .

@Repository
public interface StudentRepository extends CrudRepository<Student, String> {}

5. StudentRepository 를 사용한 데이터 액세스

StudentRepository 에서 CrudRepository 를 확장 하여 CRUD 기능을 수행하는 완전한 지속성 메서드 세트를 자동으로 얻습니다.

5.1. 새 학생 개체 저장

데이터 저장소에 새 학생 개체를 저장해 보겠습니다.

Student student = new Student(
  "Eng2015001", "John Doe", Student.Gender.MALE, 1);
studentRepository.save(student);

5.2. 기존 학생 개체 검색

학생 데이터를 가져와 이전 섹션에서 학생이 올바르게 삽입되었는지 확인할 수 있습니다.

Student retrievedStudent = 
  studentRepository.findById("Eng2015001").get();

5.3. 기존 학생 개체 업데이트

위에서 검색한 학생의 이름을 변경하고 다시 저장해 보겠습니다.

retrievedStudent.setName("Richard Watson");
studentRepository.save(student);

마지막으로 학생의 데이터를 다시 검색하고 이름이 데이터 저장소에서 업데이트되었는지 확인할 수 있습니다.

5.4. 기존 학생 데이터 삭제

삽입된 학생 데이터를 삭제할 수 있습니다.

studentRepository.deleteById(student.getId());

이제 학생 개체를 검색하고 결과가 null 인지 확인할 수 있습니다 .

5.5. 모든 학생 데이터 찾기

몇 가지 학생 개체를 삽입할 수 있습니다.

Student engStudent = new Student(
  "Eng2015001", "John Doe", Student.Gender.MALE, 1);
Student medStudent = new Student(
  "Med2015001", "Gareth Houston", Student.Gender.MALE, 2);
studentRepository.save(engStudent);
studentRepository.save(medStudent);

컬렉션을 삽입하여 이를 달성할 수도 있습니다. 이를 위해 우리가 유지하려는 여러 학생 개체를 포함 하는 단일 Iterable 개체를 허용 하는 다른 메서드인 saveAll() 이 있습니다.

삽입된 모든 학생을 찾으려면 findAll() 메서드를 사용할 수 있습니다.

List<Student> students = new ArrayList<>();
studentRepository.findAll().forEach(students::add);

그런 다음 학생 List 의 크기를 빠르게 확인 하거나 각 개체의 속성을 확인하여 더 세분화된 항목인지 확인할 수 있습니다.

6. 결론

이 기사에서는 Spring Data Redis의 기본 사항을 살펴보았습니다.

위 예제의 소스 코드는 GitHub 프로젝트 에서 찾을 수 있습니다 .

Persistence footer banner