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"

上記では、ポート16379mypassのパスワードを使用してRedisのインスタンスを開始しました。

4. スターター

Springは、 Spring DataRedisを使用してSpringBootアプリケーションをRedisに接続するための優れたサポートを提供します。

次に、pom.xmlspring-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にあります。