概要
この記事は、spring Data redisの概要であり、Spring Data platformの抽象化をredisに提供します。
Redisは、データを永続化するためにキーストアベースのデータ構造によって駆動され、データベース、キャッシュ、メッセージブローカーなどとして使用できます。
Springデータの一般的なパターン(テンプレートなど)を使用することができます。また、すべてのSpring Dataプロジェクトの伝統的な単純さも持っています。
Mavenの依存関係
PomでSpring Data Redisの依存関係を宣言することから始めましょう。xml:
<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の最新バージョンは、Maven Centralからダウンロードできます。
または、Spring Boot starter for Redisを使用することで、spring-dataとjedisの依存関係を別々にする必要がなくなります:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.3.3.RELEASE</version></dependency>
ここでも、Maven centralは最新のバージョン情報を提供します。アプリケーションクライアントとRedisサーバーインスタンス間の接続設定を定義するには、Redisクライアントを使用する必要があります。
Javaで利用可能なRedisクライアント実装がいくつかあります。 このチュートリアルでは、単純で強力なRedisクライアント実装であるJedisを使用します。
フレームワークではXMLとJavaの両方の設定がサポートされています。
3.1. Java設定
設定bean定義から始めましょう:
@BeanJedisConnectionFactory jedisConnectionFactory() { return new JedisConnectionFactory();}@Beanpublic RedisTemplate<String, Object> redisTemplate() { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(jedisConnectionFactory()); return template;}
構成は非常に簡単です。 まず、Jedisクライアントを使用して、connectionFactoryを定義しています。
次に、jedisConnectionFactoryを使用してRedisTemplateを定義しました。 これは、カスタムリポジトリでデータを照会するために使用できます。
3.2. カスタム接続プロパティ
上記の設定では、通常の接続関連のプロパティが欠落していることに既に気づいている可能性があります。 たとえば、サーバーのアドレスとポートが構成に含まれていません。 理由は簡単です:私たちの例では、私たちはデフォルトを使用しています。
ただし、接続の詳細を設定する必要がある場合は、次のようにjedisConnectionFactory設定をいつでも変更できます:
@BeanJedisConnectionFactory jedisConnectionFactory() { JedisConnectionFactory jedisConFactory = new JedisConnectionFactory(); jedisConFactory.setHostName("localhost"); jedisConFactory.setPort(6379); return jedisConFactory;}
Redis Repository
例に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を次のように作成しましょう:
@Repositorypublic interface StudentRepository extends CrudRepository<Student, String> {}
StudentRepository
を使用したデータアクセスStudentRepositoryでCrudRepositoryを拡張することにより、CRUD機能を実行する永続化メソッドの完全なセットが自動的に取得されます。
5.1. 新しいstudentオブジェクトの保存
新しいstudentオブジェクトをデータストアに保存しましょう:
Student student = new Student( "Eng2015001", "John Doe", Student.Gender.MALE, 1);studentRepository.save(student);
5.2. 既存のStudentオブジェクト
の取得前のセクションでstudentデータを取得することで、studentの正しい挿入を確認できます:
Student retrievedStudent = studentRepository.findById("Eng2015001").get();
5.3. 既存のStudentオブジェクトの更新
上記で取得したstudentの名前を変更して、再度保存してみましょう:
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()があります。saveAll()は、永続化したい複数のstudentオブジェクトを含む単一の反復可能なオブジェクトを受け入れます。saveAll()は、
挿入されたすべての学生を検索するには、findAll()メソッドを使用できます:
List<Student> students = new ArrayList<>();studentRepository.findAll().forEach(students::add);
次に、学生リストのサイズをすばやく確認したり、各オブジェクトのプロパティを確認してより粒度の高いことを確認したりできます。