データ]

  • リンク:/tag/redis/[Redis]


1概要

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

Spring Dataの一般的なパターン(テンプレートなど)を使用できるようになる一方で、すべてのSpring Dataプロジェクトの従来の単純さも維持できます。


2 Mavenの依存関係


pom.xml

でSpring Data Redisの依存関係を宣言することから始めましょう。

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

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


spring-data-redis

およびhttps://search.maven.org/classic/#searchの最新バージョン%7Cga%7C1%7Ca%3A%22jedis%22%20AND%20g%3A%22redis.clients%22[jedis]はMaven Centralからダウンロードできます。


3 Redisの設定

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

Javaで利用可能な多くのRedisクライアント実装があります。このチュートリアルでは、


Jedis

– シンプルで強力なRedisクライアント実装

を使用します。


3.1. Javaの設定

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

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


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 Data Repository

次のように

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);

コレクションを挿入してこれを達成することもできます。そのためには、

saveAll()

という別のメソッドがあります。これは、永続化したい複数の生徒オブジェクトを含む単一の

Iterable

オブジェクトを受け入れます。

挿入されたすべての生徒を見つけるには、

findAll()

メソッドを使用できます。

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


学生

リスト


6. 結論

このチュートリアルでは、Spring Data Redisの基本について説明しました。上記の例のソースコードはhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-data-redis[GitHubプロジェクト]にあります。