誰かがJFinalにehcacheを統合する方法をお願い致します場合は、トレーニングや準備、彼はこの記事を置きます

JFinalにEhcacheの統合同時アクセス速度を向上させることができます:ADOは、文は言いました。

いくつかはEhcacheのは、説明するのは簡単であるか、JFinalが何であるかを求めることができます。

JFinalは誰を知っていると、非常にクールで、JavaベースのWeb開発フレームワークのスピードです。Ehcacheのは、誰を知っていると、非常にクールで、高速で、無駄の機能を備えた、プロセスの純粋なJavaのキャッシュフレームワークです。

JFinal自体はEhcacheのにこのキャッシュプラグインを統合されていますが、デフォルトでは有効になっていません。どのようにそれはそれを有効にしますか?

私と一緒に来てください。

01、EHCacheなどを追加することのpom.xmlに依存

<dependency>
	<groupId>net.sf.ehcache</groupId>
	<artifactId>ehcache-core</artifactId>
	<version>2.6.11</version>
</dependency>
复制代码

02、JFinalConfigで設定EhCachePlugin

public class DemoConfig extends JFinalConfig {
  public void configPlugin(Plugins me) {
    me.add(new EhCachePlugin());
  }
}
复制代码

あなたはクラスベースJFinal JFinalConfig Webプロジェクトからサブクラスの継承を作成する必要があり、クラスが全体のWebプロジェクトを設定するために使用されます。

03、ehcache.xmlを追加

以下に示すように、ファイルの元の内容、プロジェクトのsrc / resourcesディレクトリのディレクトリにehcache.xmlファイルを追加します。

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="ehcache.xsd"
         updateCheck="false" monitoring="autodetect"
         dynamicConfig="true">

    <diskStore path="java.io.tmpdir"/>

	<defaultCache
			maxEntriesLocalHeap="10000"
			eternal="false"
			timeToIdleSeconds="120"
			timeToLiveSeconds="120"

			diskSpoolBufferSizeMB="30"
			maxEntriesLocalDisk="10000000"
			diskExpiryThreadIntervalSeconds="120"
			memoryStoreEvictionPolicy="LRU"
			statistics="false">
		<persistence strategy="localTempSwap"/>
	</defaultCache>
    
</ehcache>
复制代码

簡単に言えばそうでない場合は、我々は簡単な設定のためにそれに悩んで、一般的に使用される設定項目を説明します。

1)maxEntriesLocalHeap:メモリキャッシュ内のオブジェクトの最大数

2)永遠:真の表現オブジェクトの有効期限が切れることはありませんが、この時間はtimeToIdleSecondsなどtimeToLiveSecondsプロパティを無視され、デフォルトはfalseです

3)timeToIdleSecondsなど:アイドル時間が、期限切れとなるオブジェクトは、Ehcacheのはキャッシュからそれを空にしますtimeToIdleSecondsなどのプロパティ値を超えた場合、オブジェクトが最初に、最近訪問した後のアイドル時間、つまり、キャッシュが作成され、最後にアクセスした時間をにときにキャッシュの無効化の間隔、秒(s)の単位で

4)timeToLiveSeconds:オブジェクトがキャッシュ生存に格納されている場合、生存時間timeToLiveSecondsプロパティ値場合よりも、オブジェクトは、それがキャッシュからパージされ、EHCacheなどを期限切れになり、作成されたキャッシュは、最も長い時間を生き残ることができ秒(s)

我々は今、次の設定を追加した場合:

<cache name="keywordsCache"
       maxEntriesLocalHeap="500"
       eternal="false"
       overflowToDisk="true"
       diskPersistent="true"
       timeToIdleSeconds="300"
       timeToLiveSeconds="600">
</cache>
复制代码

デフォルトのキャッシュ構成の組み合わせに先立ち、導入のコントラストを来て、私は完全に把握します。

1)名前キャッシュ、その後の使用は、使用するキャッシュの名前。

2)overflowToDisk:オブジェクトの数のインメモリキャッシュはmaxEntriesLocalHeap限界に達している場合はtrue、オブジェクトがハードディスクキャッシュを書き込みオーバーフローします。このとき、オブジェクトはSerializable(?なぜ私の以前の記事チェックアウトを実装するために実装する必要があります:空の事で明らかインターフェースJavaのシリアライズを)。

3)diskPersistent:データをキャッシュするかどうかと、仮想マシンの再起動

そして、どのようにtimeToIdleSecondsなどtimeToLiveSeconds 2つの構成項目を理解するために来ます。

timeToIdleSeconds="300"
timeToLiveSeconds="600"
复制代码

隣接する2次に、データをフェッチする複数のキャッシュを仮定すると、600秒後に、データがバッファに追加された後に、キャッシュ内のデータが600秒()timeToLiveSeconds)の最大のために生き残ることができ、上記を表しますデータ取得時間間隔は300秒未満(timeToIdleSecondsなど)で、データを正常に取得することができる;しかし、最後取得し、取得した次の時間間隔は300秒を超えた場合、得られたヌル有し、データがされているのでこれは、キャッシュから削除されます。

04、キャッシュ操作使用CACHEKIT

CACHEKITクラスのキャッシュ操作がJFinalは、非常に使いやすいツールで提供されます。

Map<String, Keywords> map = CacheKit.get("keywordsCache", "keywordMap");
if (map == null) {
	map = new HashMap<>();

	List<Keywords> keywordList = dao.findAll();
	for (Keywords item : keywordList) {
		map.put(item.getKeyword(), item);
	}

	CacheKit.put("keywordsCache", "keywordMap", map);
}
复制代码

最も重要な二つの方法がありますCACHEKIT:

1) get(String cacheName, Object key)キャッシュからデータを取ります。

2)put(String cacheName, Object key, Object value)キャッシュにデータ。

たcachenameのehcache.xmlパラメータと<cache name="keywordsCache" …>これに対応するname属性はよく理解します。

パラメータのキーが使用されたキーの値を意味し、パラメータの値は、データ、イェジンハオはこの事実を理解してキャッシュされます。例えば、上記のコードでは、我々は使用keywordsCacheHashMapの内側に入れ、この設定項目は、キーがありkeywordMap、値がオブジェクトをマッピングすることです。

:内部JFinalのような、Ehcacheのメソッドを使用するために多くのツールを提供します

List<Keywords> keywordList = dao.findByCache("keywordsCache", "keywordList", "select * from keywords");
复制代码

このコードの役割は、我々は、データベースのキーワードから照会する場合、Ehcacheのキャッシュが、その後、キャッシュミスならば、フェッチし、データベースから取り始めていることです。

私はそれがある方法を知っていますか?もちろん、推測によって、我々はソースコードを見ていません。

public List<M> findByCache(String cacheName, Object key, String sql, Object... paras) {
	Config config = _getConfig();
	ICache cache = config.getCache();
	List<M> result = cache.get(cacheName, key);
	if (result == null) {
		result = find(config, sql, paras);
		cache.put(cacheName, key, result);
	}
	return result;
}
复制代码

最終的には05、

修正周波数よりもはるかに大きい場合、高周波数データクエリは、大幅にシステムのパフォーマンスを向上させることができ、キャッシュを使用します。そして今、私が質問をし、そしてあなたは今、データを変更したい場合は、DBを更新する、またはキャッシュにそれを更新するのですか?

お読みいただきありがとうございました、オリジナリティが容易ではない、賞賛をポイントしたい、これが私の最強の記録パワーになります。あなたはあなたの助けのための記事が、また、非常に興味深いが、私の公共の番号を見て思うなら、あなたに感謝。

PS:密かにも、ブーイングJavaは、データを高度$ 399値を受け取ることができるの「Java」を返信、あなたを伝えます。

おすすめ

転載: juejin.im/post/5d9c00ccf265da5b5b6c5f9a