デフォルトでは、ConcurrentMapCacheManager の ConcurrentMapCache をキャッシュ コンポーネントとして使用します。
ConcurrentMap を使用する場合、データは ConcurrentMap<object></object>
に保存されます。
実際、開発プロセスでは、いくつかのキャッシュ ミドルウェアを使用することがよくあります。
たとえば、私たちは redis、memcache (ehcache を含む) などをよく使用します。私たちは皆、何らかのキャッシュ ミドルウェアを使用しています。
以前に原理を説明したときに、springboot が多くのキャッシュ構成をサポートしていることもわかりました。
次の図に示すように:
デフォルトの開始構成はSimpleCacheConfigurationです。
他のキャッシュはいつ有効になりますか?
ctrl n を使用してこれらの構成クラスを検索し、その中に入って条件を確認できます。
##これらはすべて、これらの構成が対応するパッケージをインポートした場合にのみ有効になることを意味します。 redis をキャッシュとして統合するredis の技術を知らない生徒がいる場合は、Shang Silicon Valley の Zhou Yang 先生が公開している redis シリーズの解説ビデオがあります。または、できるだけ早く redis の公式 Web サイトにアクセスして学習することもできます。redis.cn は Redis 学習用の中国語 Web サイトです。 redis のインストールredis イメージの検索 海外の倉庫に接続されており、速度は比較的遅いです。 docker china の使用をお勧めします。 docker pull registry.docker-cn.com/library/redis##redis イメージの開始
docker run -d -p 6379:6379 --name myredis [REPOSITORY] docker ps
##redis 操作リスト
redis の set 操作#Redis スターターの紹介
##
#redis の構成## redis の原理について簡単に説明しましょう
この RedisAutoConfiguration は、コンテナーに 2 つのコンポーネントを追加します:
コンテナーに追加されるコンポーネント。1 つは と呼ばれます。 RedisTemplate、もう 1 つは StringRedisTemplate という 2 つのものです。
Redis を操作するには、この 2 つが使用されます。
これは、以前誰もがデータベースを操作するために使用していた jdbcTemplate と同じです。
これらは、Spring が Redis の操作を簡素化するために使用する 2 つのテンプレートです。これら 2 つをプログラムで使用したい場合は、それらを自動的に挿入するだけです。
#redis テスト
##redis 操作リスト:
##redis テスト保存オブジェクト
# これらの理解できないことはすべて、それらはすべて次の結果です。連載化。
redisTemplate のデフォルトのシリアル化ルール #デフォルトのシリアライザー (JdkSerializationRedisSerializer)使用済み。デフォルトのシリアライザーは、使用される JDK シリアライザーです。
json シリアライザーに切り替えましょう。それで終わりです。
redis 設定 テスト クラスでは、独自に設定した redisTemplate が自動的に挿入されます。次に、オブジェクトの保存を再度テストします。
#これは、シリアライザーの変更が成功したことを示しています。
これにより、後でオブジェクトを保存したい場合は、多くの場合シリアライザーを変更する必要があることがわかります。
#テストキャッシュ
以前は ConCurrentMap のキャッシュ マネージャーを使用していました。
このキャッシュ マネージャーは、キャッシュ コンポーネントの作成に役立ちます。
キャッシュ コンポーネントは実際にキャッシュ内で CRUD 作業を実行します。
redis を導入したら、何が起こるでしょうか?
自動構成レポートを有効にできるように、application.properties で debug=true を設定します。
この時点で、プログラムを再起動し、コンソールで検索します。
どの自動構成クラスが効果的かを確認してください。
有効になっている元のデフォルトは、SimpleCacheConfiguration です。
redis 関連のスターターを導入したので、プログラムはデフォルトで RedisCacheConfiguration を開始します。
プログラムを起動して直接テストしてください。
初めてクエリを実行するときは、データベースにクエリを実行することを意味します。
2 回目のクエリ実行時には、コンソールからの出力はなく、キャッシュがクエリされたことを示しています。
キャッシュは、デフォルトでは redis によってのみ有効になります。
その場合、それは Redis 内にある必要があります。
これは問題を示しています。k と v が両方ともオブジェクトの場合、デフォルトでオブジェクトの保存にシリアル化が使用されます。保存する。 Redis に自動的に JSON として保存させたいと考えています。 ######私たちは何をすべきか? まず、これらのプロセスの原理を分析しましょう。 1. Redis のスターターを導入したので、キャッシュマネージャーは rediscachemanager になりました。 2. デフォルトで作成された rediscachemanager は、データを操作するときに redistemplate を渡します。#3. この再配布テンプレートは、redisautoconfiguration によって作成されました。この再配布テンプレートで使用されるデフォルトのシリアル化メカニズムは jdkserializationredisserializer
です。これは、redis がデフォルトで阻止する redisCacheManager が要件を完全に満たしていないという事実と同等です。 ######私たちは何をすべきか?CacheManager をカスタマイズする必要があります。
redis を使用するときにデフォルトのシリアル化ルールを変更したい場合、どうすればよいでしょうか?
redisCacheManager をカスタマイズしてから、redisTemplate をカスタマイズし、json 関連のシリアライザーを redisTemplate に渡すことができます。データベース#残っている小さな問題
データの一部をデータベースの部門テーブルに置きます:
マッパー部門のオペレーションに対応するマッパーを作成します。対応するサービスを書きましょう
プロジェクトのテストを開始します
#次に、redis にデータがあるかどうかを確認してみましょう。
redis に dept 関連のデータがあることがわかりました。
dept を 2 回目にクエリするときは、redis をキャッシュする必要があります。
しかし、2回目に確認したところ、次のようなエラーが発生しました。
上記で報告されたエラーは、json を読み取れないことを意味します。
部門の json オブジェクトを従業員の json オブジェクトに変換する必要があるためですが、これは不可能です。
これは、配置した redisCacheManager が運用担当者向けであるためです。
つまり、今私たちが見ている効果は非常に魔法的です。
キャッシュされたデータは Redis に保存できます。
しかし、キャッシュから 2 回目にクエリを実行する場合、キャッシュを逆シリアル化して戻すことはできません。
私たちが保存しているのは部門の json データであり、キャッシュマネージャーは従業員のテンプレートを使用してデフォルトで Redis を操作していることがわかりました。
これは従業員データのみを逆シリアル化できます。
現時点では、redisCacheManager が 2 つあります。どちらを使用すればよいでしょうか?
サービス内で指定可能です。
#その後、プロジェクトを再起動すると、結果はエラーになります: If 、複数のキャッシュマネージャーがある場合は、デフォルトで構成されたキャッシュマネージャーとして特定のキャッシュマネージャーを使用する必要があります。 たとえば、次の操作を実行して、この起動エラーの内容を修正できます: プロジェクト テストのために再起動At今回は、2 番目の部門クエリを実行するときに、Redis から部門情報をデシリアライズして正常に正常に読み取ることができるかどうかを確認してみましょう。 現時点では、従業員であっても部門であっても、 redis から正常に逆シリアル化してクエリできることがわかりました。 ######これは完璧です。 キャッシュを操作するコーディング方法先ほど述べたのは、すべてアノテーションを使用してデータをキャッシュに配置することです。 しかし、開発をしていると、このような状況に遭遇することがよくあります。 つまり、開発が特定の段階に達したら、いくつかのデータをキャッシュに入れる必要があります。 キャッシュを操作するにはコーディングを使用する必要があります。 たとえば、部門情報をクエリした後、この情報を Redis に配置したいとします。 部門のcacheManagerを注入できます。そして、コーディングプロセス中に、このcacheManagerを操作することでキャッシュを取得できます。
その後、キャッシュコンポーネントを操作してデータを増やすことができます。削除、変更、確認を行います。 # 上記のコードをテストしてプロジェクトを開始したところ、問題はなく、データが Redis に正常に配置されたことがわかりました。以上がSpringbootキャッシュRedis統合方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。