ホームページ  >  記事  >  Java  >  二次キャッシュの問題に関する MyBatis コード例の詳細な説明

二次キャッシュの問題に関する MyBatis コード例の詳細な説明

黄舟
黄舟オリジナル
2017-03-24 10:34:361770ブラウズ

この記事では主に、2次キャッシュに関するMyBatisの問題を紹介します。2次キャッシュは、複数のSQLSessionが同じMapperを動作させる場合、その2次キャッシュを共有することができます。

MyBatis は 1 次キャッシュと 2 次キャッシュを提供します。1 次キャッシュは sqlSession レベルのキャッシュであり、異なる sqlSession 間のキャッシュは相互に影響しません。 2次キャッシュはMapperレベルのキャッシュであり、複数のsqlSessionが同じMapper上で動作し、その2次キャッシュを共有することができます。


MyBatis には、選択できるさまざまな 2 次キャッシュ ソリューションがあります。その中でも、

Memcached のサポートは比較的成熟しています。ここでは、Memcached を例として Spring プロジェクトとの統合を紹介します。

configuration

を使用してpom.

xmlを構成し、依存関係を追加します。

<dependencies>
 ...
 <dependency>
  <groupId>org.mybatis.caches</groupId>
  <artifactId>mybatis-memcached</artifactId>
  <version>1.0.0</version>
 </dependency>
 ...
</dependencies>

グローバルスイッチ

<settings>
  <setting name="cacheEnabled" value="true"/>
</settings>

キャッシュする必要があるmapper.xmlを設定します

2次キャッシュはMapperレベルであり、特定のmapper.xmlに対して2次キャッシュをオンにすることができます。

<mapper namespace="org.acme.FooMapper">
 <cache type="org.mybatis.caches.memcached.MemcachedCache" />
</mapper>

をオンにすると、マッパー内のすべての select ステートメントがデフォルトでキャッシュされ、この

namespace の下にあるすべての insert、update、および delete ステートメントにより、スペース内のキャッシュがクリアされます。

キャッシュは特定のステートメントに対して無効にすることができます。

 <select id="retObj" resultMap="results" useCache="false" >
   select id, name, sex from employee  
 </select>

は、特定のステートメントの更新アクションをトリガーすることもできます (デフォルトは、すべての insert、

updatedelete ステートメントに対応します)。

 <select id="retObj" resultMap="results" flushCache="true" >
   select id, name, sex from employee  
 </select>

構成パラメーターは memcached.properties で設定されます。欠落している場合は、デフォルト設定が使用されます。

以下は設定パラメータです:

キャッシュ操作ログを記録する必要がある場合は、次の設定で実現できます

<mapper namespace="org.acme.FooMapper">
 <cache type="org.mybatis.caches.memcached.LoggingMemcachedCache" />
 ...
</mapper>

注意事項

Memcachedにキャッシュされたクラスは実装する必要がありますそれ以外の場合は、エラー java.io.NotSerializable

Exception が報告されます。

2次キャッシュの適用シナリオ

  1. クエリ頻度が高く変更頻度が低いデータには、2次キャッシュを使用することをお勧めします。

  2. アクセスが多く、ユーザーがリアルタイムのクエリ結果に対する高い要件を持たないクエリ リクエストの場合、mybatis の第 2 レベルのキャッシュ テクノロジを使用して、データベース アクセスを削減し、アクセス速度を向上させることができます。次のようなビジネス シナリオがあります。統計分析 SQL、電話料金クエリ SQL などを使用します。

実装方法は以下の通りです。

リフレッシュ間隔を設定することで、mybatisは一定の間隔で自動的にキャッシュをクリアし、データの変更頻度に応じてキャッシュのリフレッシュ間隔をflushIntervalに設定するなどの設定を行います。需要に応じて、30 分、60 分、24 時間など。

mybatis の制限事項

mybatis の 2 次キャッシュは、きめ細かいデータ レベルのキャッシュが苦手です。


例えば、商品情報をキャッシュしたい。商品情報のクエリトラフィックが多いため、現時点ではmybatisの2次キャッシュがあれば、ユーザーは毎回最新の商品情報をクエリする必要がある。このとき、マイベイトの二次キャッシュ領域はマッパーに分割されているため、製品が変更された場合にはその情報が更新されません。変更すると、すべての製品情報のキャッシュ データがすべてクリアされます。このような問題を解決するには、ビジネス層のニーズに基づいてデータをターゲットを絞ってキャッシュする必要があります。

以上が二次キャッシュの問題に関する MyBatis コード例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。