SpringDataRedisのプロパティベースの構成
1. 概要
Spring Bootの主な魅力の1つは、サードパーティの構成をいくつかのプロパティに減らすことが多いことです。
このチュートリアルでは、Spring BootがRedisの操作をどのように簡素化するかを見ていきます。
2. なぜRedisなのか?
Redis は、最も人気のあるメモリ内データ構造ストアの1つです。 このため、データベース、キャッシュ、およびメッセージブローカーとして使用できます。
パフォーマンスの面では、高速応答時間でよく知られています。 その結果、1秒あたり数十万の操作を処理でき、簡単に拡張できます。
そして、SpringBootアプリケーションとうまくペアリングします。 たとえば、マイクロサービスアーキテクチャのキャッシュとして使用できます。 NoSQLデータベースとしても使用できます。
3. Redisの実行
開始するには、公式Dockerイメージを使用してRedisインスタンスを作成しましょう。
$ docker run -p 16379:6379 -d redis:6.0 redis-server --requirepass "mypass"
上記では、ポート16379でmypassのパスワードを使用してRedisのインスタンスを開始しました。
4. スターター
Springは、 Spring DataRedisを使用してSpringBootアプリケーションをRedisに接続するための優れたサポートを提供します。
次に、pom.xmlにspring-boot-starter-data-redis依存関係があることを確認しましょう。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
5. レタス
次に、クライアントを構成しましょう。
Java Redisクライアントは、Spring Bootがデフォルトで使用するため、レタスです。ただし、Jedisを使用することもできます。
いずれにせよ、結果はRedisTemplateのインスタンスになります。
@Bean
public RedisTemplate<Long, Book> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<Long, Book> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
// Add some specific configuration here. Key serializers, etc.
return template;
}
6. プロパティ
Lettuceを使用する場合、RedisConnectionFactoryを構成する必要はありません。Spring Bootが構成します。
残っているのは、application.propertiesファイルでいくつかのプロパティを指定することだけです。
spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=16379
spring.redis.password=mypass
spring.redis.timeout=60000
それぞれ:
- database は、接続ファクトリが使用するデータベースインデックスを設定します
- host は、サーバーホストが配置されている場所です
- port は、サーバーがリッスンしているポートを示します
- password はサーバーのログインパスワードであり、
- timeoutは接続タイムアウトを確立します
もちろん、構成できるプロパティは他にもたくさんあります。 構成プロパティの完全なリストは、SpringBootのドキュメントに記載されています。
7. デモ
最後に、アプリケーションで使用してみましょう。 BookクラスとBookRepositoryを想像すると、は RedisTemplateを使用してBookを作成および取得し、Redisと対話できます。バックエンド:
@Autowired
private RedisTemplate<Long, Book> redisTemplate;
public void save(Book book) {
redisTemplate.opsForValue().set(book.getId(), book);
}
public Book findById(Long id) {
return redisTemplate.opsForValue().get(id);
}
デフォルトでは、Lettuceがシリアル化と逆シリアル化を管理するため、現時点ではこれ以上何もする必要はありません。 ただし、これも構成できることを知っておくとよいでしょう。
もう1つの重要な機能は、 RedisTemplate がスレッドセーフであるため、マルチスレッド環境で正しく動作することです。
8. 結論
この記事では、レタスを介してRedisと通信するようにSpringBootを構成しました。 そして、スターター、単一の @Bean 構成、およびいくつかのプロパティでそれを達成しました。
最後に、 RedisTemplate を使用して、Redisを単純なバックエンドとして機能させました。
完全な例は、GitHubのにあります。