1. 概要

このチュートリアルは、 Spring Data Redis の概要です。これは、人気のあるメモリ内データ構造ストアであるRedisにSpringDataプラットフォームの抽象化を提供します。

Redisは、キーストアベースのデータ構造によって駆動され、データを永続化し、データベース、キャッシュ、メッセージブローカーなどとして使用できます。

Spring Dataの一般的なパターン(テンプレートなど)を使用しながら、すべてのSpring Dataプロジェクトの従来のシンプルさも利用できるようになります。

2. Mavenの依存関係

pom.xmlでSpring DataRedisの依存関係を宣言することから始めましょう。

<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-redisおよびjedisの最新バージョンはMavenCentralからダウンロードできます。

または、Redis用のSpring Bootスターターを使用することもできます。これにより、spring-datajedisの個別の依存関係が不要になります。

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

繰り返しになりますが、 MavenCentralは最新のバージョン情報を提供します。

3. Redis構成

アプリケーションクライアントとRedisサーバーインスタンス間の接続設定を定義するには、Redisクライアントを使用する必要があります。

Javaで利用できるRedisクライアントの実装は多数あります。 このチュートリアルでは、シンプルで強力なRedisクライアント実装であるJedisを使用します。

フレームワークでは、XMLとJavaの両方の構成が適切にサポートされています。 このチュートリアルでは、Javaベースの構成を使用します。

3.1. Java構成

構成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. Redisリポジトリ

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. Springデータリポジトリ

StudentRepositoryを作成しましょう。

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

5. StudentRepositoryを使用したデータアクセス

CrudRepositoryStudentRepositoryに拡張することで、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);

コレクションを挿入することでもこれを実現できます。 そのために、別のメソッド— saveAll() —があります。これは、永続化する複数の学生オブジェクトを含む単一のIterableオブジェクトを受け入れます。

挿入されたすべての学生を検索するには、 findAll()メソッドを使用できます。

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

次に、 学生リストのサイズをすばやく確認したり、各オブジェクトのプロパティを確認して粒度を確認したりできます。

6. 結論

この記事では、SpringDataRedisの基本について説明しました。

上記の例のソースコードは、GitHubプロジェクトにあります。