この記事の主な研究は、次のように、スプリングキャッシュ関連のコンテンツに関するものです。
この記事は、Googleの翻訳に基づいて大まかに変更されました。元のテキストが何であるかわからないので、翻訳のエラーや不正確さにつながる可能性がありますが、一般的な方向性は非常に気持ちがいいので、私はそれが役立つことを期待してここで整理しました。
キャッシュは、アプリケーションのパフォーマンスを改善し、ワークロードを減らすために、常に大きなニーズでした。さらに、その有用性は今日特に明白です。これは、Webアプリケーションのアーキテクチャ、アプリケーションのビジネスロジックに直交するキャッシュマネジメントのアーキテクチャで数千人の訪問者を処理するために使用できます。バージョン3.1から始めて、Springは、宣言的トランザクション管理と同様のキャッシュ管理APIを提供します。異なるキャッシュソリューションを統一された方法で使用するキャッシュの抽象インターフェイスは、コードに最も影響を与えません。
SpringはJavaメソッドを使用して、パラメーターとの組み合わせに対して初めてメソッドを要求し、Springはキャッシュに戻り値を保存します。したがって、次の要求は、コストのかかる方法を呼び出すことなく、キャッシュから値を直接使用することです。呼び出された方法に影響を与えることなく、すべてが透過的に適用されます。
この投稿では、春から2つの異なるキャッシュストレージの実装が表示されます。
スプリングとキャッシュの統合はシンプルで透明です。キャッシュが必要な方法は、@CachableAnonotationによって注釈が付けられています
@cachable(value = "datacache")public reponse getdatas(long param1、string param2){} DataCacheは、関連するキャッシュの名前です。このメソッドが初めて呼び出されると、メソッドは、結果として<パラメーター1とパラメーター2>からシークレットキーがハッシュして、実行結果を実行して実行します。同じパラメーターが再び呼び出された場合、この方法を再度実行する必要はありません。
複数のキャッシュが私たちの方法に関連付けられている可能性があります
@cachable({"datacache"、 "default"})public reponse getdatas(long param1、string param2){}この場合、メソッドが実行される前に各キャッシュがチェックされ、ヒットがある場合、関連する値が返されます。
キャッシュマネージャーの基本的なアルゴリズムの割合は比較的少ないです。キャッシュは、保存されたオブジェクトが一意のキーによってマッピングされるメモリ領域と見なすことができます。オブジェクト検索のプロセスは次のとおりです。
1。キーを計算します(ハッシュコードを取得するにはハッシュメソッドを使用します)
2。キー値に基づいてオブジェクトを見つけます
3.オブジェクトが見つかった場合は、結果を返します
4.見つからない場合、実際にオブジェクトに関連付けられているキーが計算され、オブジェクトは対応する場所に保存されます。
Springは、合格したメソッドパラメーターに基づいてキーを生成する単純なハッシュを使用します。
ターゲットメソッドは、パラメーターに基づいて不要なキーを単純に生成することはできませんが、パラメーターに基づいて生成される簡単なケースの一部のみが生成されます。
@cachable(value = "datacache")public reponse getdatas(long param1、string param2、boolean param3){}@Cacheableにより、開発者はキー生成が自分で生成される方法を指定できます。これを行うには、Spel式を使用できます。
@cachable(value = "datacache"、key = "#param2")public reponse getdatas(long param1、string param2、boolean param3){}上記のこの場合、キャッシュキーのパラメーターはparma2のみです
春はネストされたプロパティも許可します
@cachable(value = "datacache"、key =#param2.name ")public reponse getdatas(long param1、data param2、boolean param3){}この状況は、parma2の名前属性に基づいて計算される重要なものです
使用済みの場合のキャッシュには適していないキャッシュがありますが、場合によってはキャッシュが必要です。キャッシュされると、キャッシュはスペル式によって計算された真または偽に基づいて処理され、条件が真の場合、キャッシュが実行されます。
@cachable(value = "datacache"、key = "#param2"、condition = "#param2.length <64")public reponse getdatas(long param1、string param2、boolean param3){}この場合、2番目のパラメーターの長さが64未満の場合にのみキャッシュが実行されます
Springのキャッシュは、データをキャッシュするだけでなく、キャッシュストレージをクリアできます。このプロセスは、古いデータまたは未使用のキャッシュデータを削除するために使用されます。 annotation @cacheevictは、キャッシュ空の空間を実行する方法を定義します。これらは、キャッシュ内のデータを削除するためのトリガーです。
@cacheevict(value = "datacache")public void reloaddata(){}このオプションは非常に必要であり、この方法は、キャッシュされたデータをクリアする必要がある場合に使用されます。
Springプロジェクトのキャッシュサポートを有効にするには、名前空間にキャッシュコメントを追加する必要があります。
<beans xmlns = "http://www.springframework.org/schema/beans" xmlns:cache = "http://www.springframework.org/schema/cache" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns:context = "http://www.springframework.org/schema/context" xsi:schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www. http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd http://www.springframework.org/schema/contex
削除注釈はキャッシュを無効にしたり、構成クラスでキャッシュの使用を有効にしたりできます
@configuration @enablecaching public class appconfig {}技術的な制限
オブジェクトパスメソッドのパラメーターには、シークレットキーを計算するために独自のハッシュコードメソッドが必要です。
オブジェクトがパラメーターとして渡されて返されると、シリアル化可能である必要があります
選択を実装します
Springは2つの基本的な実装を提供します。
それらを使用する場合、適切なキャッシュマンガーとマネージャーのエンティティを宣言するだけが必要です
Javaを使用したConcurrenthashmap
<bean id = "cachemanager"> <span style = "pre"> </span> <プロパティ名= "caches"> <span style = "ホワイトスペース:pre"> </span> <set> <span style = "" white = "pre"> </span> <bean name = "デフォルト"/> <スパンスタイル:
各マネージャーには、コメントによって認識される名前が必要です。マネージャーによって複数のsimplecachemangerを管理することができ、この実装は基本的に不要です。
ehcacheを実装します
キャッシュマンガーの声明
bean id = "cachemanager"> <プロパティ名= "cachemanager" ref = "ehcache"/> </bean> <bean id = "ehcache"> <プロパティ名= "configlocation" value = "classpath:ehcache.xml"/> <プロパティ名= "共有"値= "
ehcache.xmlファイルには、アプリケーションキャッシュパラメーターファイルがあります。
<ehcache xsi:nonmesspacesschemalocation = "ehcache.xsd" updatecheck = "true" Monitoring = "autodetect" dynamicconfig = "true" maxbyteslocalheap = "150m"> <diskstore path = "java.io.tmpdir" OverflowTodisk = "false"/> <cache name = "dataCache" eterinal = "false" timetoidLeseconds = "300" maxbyteslocalheap = "30m" TimetoliveseConds = "300" Overflowtodisk = "True" diskpersist = "deckexpirythreadervalseconds =" 120 "" " MemoryStoreEvictionPolicy = "lru"/> </ehcache>
ehcacheを使用すると、複数のキャッシュ別のパラメーターを非常に簡単な方法で定義できます
名前:キャッシュされた識別子
maxbyteslocalheap:キャッシュが仮想マシンに使用できるバイト数を定義します。 CacheManager Maxbyteslocalheapが設定されている場合、キャッシュの決定されたサイズはCacheManagerによって差し引かれます。他のキャッシュ共有ブレーク。このプロパティの値はdata <number> k | k | m | m | g | Gは、キロバイト(k | k)、メガバイト(m | m)またはギガバイト(g | g)を表します。
永遠:要素が永遠であるかどうかを定義します。この場合、タイムアウトは無視され、プロジェクトが期限切れになることはありません。
TimeToidLESECONDS:これは秒数で、アイテムは最後の使用率に残されています。LAデフォルト値は0、要素はまだ残っています
TimeToliveseConds:これは、プロジェクトがcache.laのデフォルト値の作成に住んでいる秒数であり、プロジェクトは永遠に生きています。
MemoryStoreEvictionPolicy Plunder Policy:LRU-最近使用されていない、FIFO -FIFO -First -In、最古の要素は作成日までに使用されます。
DiskexPirythReadIntervalseConds:差し押さえプロセスは、2回の実行間の秒数を制御します。
DiskPersist:ディスクに保存されている仮想マシンの2つの一致の間でオブジェクトを復元できます。
OverflowTodisk:オブジェクトをディスクに保存して、最大ストレージ要素を実現できるかどうかを判断します。
要約するには、単純な数学式を使用してください: expirationTime = Math.min((creationTime + timeToLive),(mostRecentTime + timeToIdle))
上記は、この記事のスプリングキャッシュコードのすべての詳細な説明です。すべての人に役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!