Spring Data Redisの紹介

Spring Data Redisの概要

1. 概要

この記事はan introduction to Spring Data Redisであり、Spring Dataプラットフォームの抽象化をRedis(人気のあるインメモリデータ構造ストア)に提供します。

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

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

2. Mavenの依存関係

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


    org.springframework.data
    spring-data-redis
    2.0.3.RELEASE
 


    redis.clients
    jedis
    2.9.0
    jar

spring-data-redisおよびjedisの最新バージョンは、MavenCentralからダウンロードできます。

3. Redis構成

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

Javaで利用できるRedisクライアントの実装は多数あります。 このチュートリアルでは、we’ll use Jedis – a simple and powerful Redis client implementation

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

3.1. Java設定

構成Beanの定義から始めましょう。

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

@Bean
public RedisTemplate redisTemplate() {
    RedisTemplate 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 {}

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

StudentRepositoryCrudRepositoryを拡張することにより、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());

これで、studentオブジェクトを検索して、結果が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 students = new ArrayList<>();
studentRepository.findAll().forEach(students::add);

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

6. 結論

このチュートリアルでは、Spring Data Redisの基本について説明しました。 上記の例のソースコードはa GitHub projectにあります。