ホームページ  >  記事  >  データベース  >  SpringbootキャッシュRedis統合方法

SpringbootキャッシュRedis統合方法

WBOY
WBOY転載
2023-05-30 13:22:12730ブラウズ

    デフォルトでは、ConcurrentMapCacheManager の ConcurrentMapCache をキャッシュ コンポーネントとして使用します。

    ConcurrentMap を使用する場合、データは ConcurrentMap<object></object> に保存されます。

    実際、開発プロセスでは、いくつかのキャッシュ ミドルウェアを使用することがよくあります。

    たとえば、私たちは redis、memcache (ehcache を含む) などをよく使用します。私たちは皆、何らかのキャッシュ ミドルウェアを使用しています。

    以前に原理を説明したときに、springboot が多くのキャッシュ構成をサポートしていることもわかりました。

    次の図に示すように:

    SpringbootキャッシュRedis統合方法

    デフォルトの開始構成はSimpleCacheConfigurationです。

    他のキャッシュはいつ有効になりますか?

    ctrl n を使用してこれらの構成クラスを検索し、その中に入って条件を確認できます。

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    ##これらはすべて、これらの構成が対応するパッケージをインポートした場合にのみ有効になることを意味します。

    redis をキャッシュとして統合する

    redis の技術を知らない生徒がいる場合は、Shang Silicon Valley の Zhou Yang 先生が公開している redis シリーズの解説ビデオがあります。または、できるだけ早く redis の公式 Web サイトにアクセスして学習することもできます。redis.cn は Redis 学習用の中国語 Web サイトです。

    redis のインストール

    redis イメージの検索

    SpringbootキャッシュRedis統合方法

    海外の倉庫に接続されており、速度は比較的遅いです。

    docker china の使用をお勧めします。

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    docker pull registry.docker-cn.com/library/redis

    SpringbootキャッシュRedis統合方法

    ##redis イメージの開始SpringbootキャッシュRedis統合方法

    docker run -d -p 6379:6379 --name myredis [REPOSITORY]
    docker ps

    テストのために、redis 接続ツールを開きます。

    redis デスクトップ マネージャー

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    ##Redis の共通データ操作をテストする

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    ##redis 操作リストSpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    redis の set 操作

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法#Redis スターターの紹介

    SpringbootキャッシュRedis統合方法##

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    #redis の構成

    SpringbootキャッシュRedis統合方法## redis の原理について簡単に説明しましょう

    We redis スターターが導入された後、redisAutoConfiguration が機能します。

    SpringbootキャッシュRedis統合方法この RedisAutoConfiguration は、コンテナーに 2 つのコンポーネントを追加します:

    SpringbootキャッシュRedis統合方法コンテナーに追加されるコンポーネント。1 つは と呼ばれます。 RedisTemplate、もう 1 つは StringRedisTemplate という 2 つのものです。

    Redis を操作するには、この 2 つが使用されます。

    これは、以前誰もがデータベースを操作するために使用していた jdbcTemplate と同じです。

    これらは、Spring が Redis の操作を簡素化するために使用する 2 つのテンプレートです。これら 2 つをプログラムで使用したい場合は、それらを自動的に挿入するだけです。

    #redis テストSpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    ##redis 操作リスト:

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法##redis テスト保存オブジェクト

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    # これらの理解できないことはすべて、それらはすべて次の結果です。連載化。 SpringbootキャッシュRedis統合方法

    redisTemplate のデフォルトのシリアル化ルール

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    #デフォルトのシリアライザー (JdkSerializationRedisSerializer)使用済み。

    SpringbootキャッシュRedis統合方法デフォルトのシリアライザーは、使用される JDK シリアライザーです。

    json シリアライザーに切り替えましょう。それで終わりです。 SpringbootキャッシュRedis統合方法

    redis 設定

    テスト クラスでは、独自に設定した redisTemplate が自動的に挿入されます。

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法次に、オブジェクトの保存を再度テストします。

    SpringbootキャッシュRedis統合方法

    #これは、シリアライザーの変更が成功したことを示しています。

    これにより、後でオブジェクトを保存したい場合は、多くの場合シリアライザーを変更する必要があることがわかります。 SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法#テストキャッシュ

    以前は ConCurrentMap のキャッシュ マネージャーを使用していました。
    このキャッシュ マネージャーは、キャッシュ コンポーネントの作成に役立ちます。
    キャッシュ コンポーネントは実際にキャッシュ内で CRUD 作業を実行します。

    redis を導入したら、何が起こるでしょうか?
    自動構成レポートを有効にできるように、application.properties で debug=true を設定します。
    この時点で、プログラムを再起動し、コンソールで検索します。
    どの自動構成クラスが効果的かを確認してください。

    SpringbootキャッシュRedis統合方法

    有効になっている元のデフォルトは、SimpleCacheConfiguration です。

    redis 関連のスターターを導入したので、プログラムはデフォルトで RedisCacheConfiguration を開始します。

    SpringbootキャッシュRedis統合方法

    プログラムを起動して直接テストしてください。

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    初めてクエリを実行するときは、データベースにクエリを実行することを意味します。

    2 回目のクエリ実行時には、コンソールからの出力はなく、キャッシュがクエリされたことを示しています。

    キャッシュは、デフォルトでは redis によってのみ有効になります。

    その場合、それは Redis 内にある必要があります。

    SpringbootキャッシュRedis統合方法

    これは問題を示しています。k と v が両方ともオブジェクトの場合、デフォルトでオブジェクトの保存にシリアル化が使用されます。保存する。 Redis に自動的に JSON として保存させたいと考えています。 ######私たちは何をすべきか?

    まず、これらのプロセスの原理を分析しましょう。

    1. Redis のスターターを導入したので、キャッシュマネージャーは rediscachemanager になりました。

    2. デフォルトで作成された rediscachemanager は、データを操作するときに redistemplate を渡します。

    #3. この再配布テンプレートは、redisautoconfiguration によって作成されました。この再配布テンプレートで使用されるデフォルトのシリアル化メカニズムは SpringbootキャッシュRedis統合方法jdkserializationredisserializer

    です。これは、redis がデフォルトで阻止する redisCacheManager が要件を完全に満たしていないという事実と同等です。 ######私たちは何をすべきか?

    CacheManager をカスタマイズする必要があります。

    カスタマイズされた redisCacheManager

    この時点で、プロジェクトを再度開始してテストします。この時点で、redis で結果を確認できます。それが欲しかった。

    SpringbootキャッシュRedis統合方法

    Yunqiu の次のインタビューでは、ソフトウェア パークに来たい人たちに、redis スターターがオブジェクトを保存するときに redisTemplate とは何かを知っていますか、と尋ねることができます。デフォルトのシリアル化ルール?

    SpringbootキャッシュRedis統合方法redis を使用するときにデフォルトのシリアル化ルールを変更したい場合、どうすればよいでしょうか?

    redisCacheManager をカスタマイズしてから、redisTemplate をカスタマイズし、json 関連のシリアライザーを redisTemplate に渡すことができます。

    #残っている小さな問題

    データベース

    SpringbootキャッシュRedis統合方法データの一部をデータベースの部門テーブルに置きます:

    マッパー

    部門のオペレーションに対応するマッパーを作成します。

    SpringbootキャッシュRedis統合方法

    #service

    対応するサービスを書きましょう

    SpringbootキャッシュRedis統合方法

    controller

    SpringbootキャッシュRedis統合方法プロジェクトのテストを開始します

    #次に、redis にデータがあるかどうかを確認してみましょう。 SpringbootキャッシュRedis統合方法

    redis に dept 関連のデータがあることがわかりました。

    dept を 2 回目にクエリするときは、redis をキャッシュする必要があります。

    しかし、2回目に確認したところ、次のようなエラーが発生しました。

    エラー

    SpringbootキャッシュRedis統合方法

    上記で報告されたエラーは、json を読み取れないことを意味します。

    部門の json オブジェクトを従業員の json オブジェクトに変換する必要があるためですが、これは不可能です。

    これは、配置した redisCacheManager が運用担当者向けであるためです。

    SpringbootキャッシュRedis統合方法

    つまり、今私たちが見ている効果は非常に魔法的です。

    キャッシュされたデータは Redis に保存できます。

    しかし、キャッシュから 2 回目にクエリを実行する場合、キャッシュを逆シリアル化して戻すことはできません。

    私たちが保存しているのは部門の json データであり、キャッシュマネージャーは従業員のテンプレートを使用してデフォルトで Redis を操作していることがわかりました。

    これは従業員データのみを逆シリアル化できます。

    エラーの解決策

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    現時点では、redisCacheManager が 2 つあります。どちらを使用すればよいでしょうか?

    サービス内で指定可能です。

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    #その後、プロジェクトを再起動すると、結果はエラーになります:

    SpringbootキャッシュRedis統合方法

    If 、複数のキャッシュマネージャーがある場合は、デフォルトで構成されたキャッシュマネージャーとして特定のキャッシュマネージャーを使用する必要があります。

    たとえば、次の操作を実行して、この起動エラーの内容を修正できます:

    SpringbootキャッシュRedis統合方法

    プロジェクト テストのために再起動

    At今回は、2 番目の部門クエリを実行するときに、Redis から部門情報をデシリアライズして正常に正常に読み取ることができるかどうかを確認してみましょう。

    SpringbootキャッシュRedis統合方法

    SpringbootキャッシュRedis統合方法

    現時点では、従業員であっても部門であっても、 redis から正常に逆シリアル化してクエリできることがわかりました。 ######これは完璧です。

    キャッシュを操作するコーディング方法

    先ほど述べたのは、すべてアノテーションを使用してデータをキャッシュに配置することです。

    しかし、開発をしていると、このような状況に遭遇することがよくあります。

    つまり、開発が特定の段階に達したら、いくつかのデータをキャッシュに入れる必要があります。

    キャッシュを操作するにはコーディングを使用する必要があります。

    たとえば、部門情報をクエリした後、この情報を Redis に配置したいとします。

    部門のcacheManagerを注入できます。

    そして、コーディングプロセス中に、このcacheManagerを操作することでキャッシュを取得できます。SpringbootキャッシュRedis統合方法

    その後、キャッシュコンポーネントを操作してデータを増やすことができます。削除、変更、確認を行います。

    # 上記のコードをテストしてプロジェクトを開始したところ、問題はなく、データが Redis に正常に配置されたことがわかりました。

    SpringbootキャッシュRedis統合方法

    以上がSpringbootキャッシュRedis統合方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。