springキャッシュコードの詳細


本論文で研究したのは主にspringキャッシュの関連内容であり、詳しくは以下の通りである。
この文章はGoogleの翻訳によって大体修正されたものです。原文は何語なのか分かりませんので、翻訳の誤りと不正確なところがあるかもしれませんが、大体の方向はなかなかいいと思います。
キャッシュは、これらの2つのアプリケーションの性能を向上させ、その作業量を低減させるために非常に必要です。また、その用途は今日特に明らかであり、何千何万もの観光客がconcurrents.D'unアーキテクチャ上のWebアプリケーションを処理することができ、キャッシュ管理はアプリケーションに直交する業務ロジックとこのため、アプリケーション自体の発展に影響を最小限に抑えるべきである。3.1バージョンから、Springはキャッシュ管理のAPIを提供し、同様のステートメント事務管理を提供する。キャッシュの抽象インターフェースは、異なるキャッシュソリューションを一括して使用し、コードに対する影響が最小である。
springはJava方法でパラメータの組合せを初めて要求する方法で、springはキャッシュに戻り値を格納する。したがって、次の要求は、可能な高いコストを呼び出すことなく、キャッシュからの値を直接使用する方法である。すべてを透明に適用し、呼び出しの方法に影響を与えません。
この記事では、Springとは異なるキャッシュメモリの実現を見ます。
  • JavaのConcerenthashMap
  • Ehcache

  • 実現する
    springとキャッシュの整合は簡単で透明で、@Cachebaleで注釈表示してキャッシュが必要な方法です。
    
    @Cacheable(value= "dataCache")  
    public Reponse getDatas(Long param1, String param2){ } 
    dataCacheは、関連するキャッシュの名前です。この方法を初めて呼び出した場合、この方法は実行され、実行された結果を<パラメータ1、パラメータ2>ハッシュで出た秘密鍵に格納した結果をまとめて、同じパラメータを使って再度起動する場合、この方法は再実行する必要がない。
    複数のキャッシュが私達の方法に関連している可能性があります。
    
    @Cacheable({"dataCache",”default”})   
    public Reponse getDatas(Long param1, String param2){  } 
    この場合、各キャッシュは、方法の実行前にチェックされ、命中があれば、関連する値が返されます。
    キャッシュキーを生成
    キャッシュマネージャの基本的なアルゴリズムの比率は比較的小さい。キャッシュは、メモリ領域と見なされ、記憶されているオブジェクトのうちの一つは、一意の秘密鍵によってマッピングされる。オブジェクト検索のプロセスは以下の通りです。
    1、keyを計算する(hash方法でhashcodeを得る)
    2、key値に基づいてオブジェクトを検索する
    3、対象が見つかったら、その結果を返します。
    4、もし見つけられないなら、実際に対象と関連しているkeyを計算して、対象を該当の位置に保存します。
    springは簡単なハッシュを使用しており、転送の方法パラメータに従ってkeyを生成する。
    カスタムキャッシュ
    目標方法はパラメータによって不要なkeyを簡単に生成することはできません。パラメータによって生成されるのは簡単な場合だけです。
    
    @Cacheable(value= "dataCache")   
    public Reponse getDatas(Long param1, String param2, boolean param3){  } 
    @Cachebaleは開発者が自分でkeyを指定して生成する方式を許可するので、spel式を使ってこの事をすることができます。
    
    @Cacheable(value= "dataCache", key="#param2")   
    public Reponse getDatas(Long param1, String param2, boolean param3){   } 
    上記の場合、キャッシュで計算された秘密鍵のパラメータは、Part 2だけです。
    スプリングは入れ子の属性も許可されています。
    
    @Cacheable(value="dataCache", key=#param2.name")  
     public Reponse getDatas(Long param1, Data param2, boolean param3){} 
    この場合はPart 2のname属性から計算される秘密鍵です。
    条件キャッシュ
    使用している場合のキャッシュには、キャッシュが適用されない場合がありますが、ある場合はキャッシュが必要です。キャッシュの場合は、SPEL式で計算された真偽に基づいてキャッシュの処理を行います。条件が本当であればキャッシュを行います。
    
    @Cacheable(value= "dataCache", key="#param2", condition="#param2.length<64")   
    public Reponse getDatas(Long param1, String param2, boolean param3){  } 
    この場合、バッファは、第2のパラメータの長さが64より小さい場合にのみ行われる。
    @Cacheevictコメント
    springのキャッシュは、データをキャッシュするだけでなく、キャッシュメモリをクリアすることもできる。このプロセスは、古いデータまたは不要なキャッシュデータを除去するために使用される。注釈@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.springframework.org/schema/cache       
        http://www.springframework.org/schema/cache/spring-cache.xsd       
        http://www.springframework.org/schema/context">   
      
    <cache:annotation-driven /> 
    注釈を削除するとキャッシュを無効にすることができます。また、私たちの設定クラスでキャッシュの使用を有効にすることもできます。
    
    @Configuration   
    @EnableCaching   
    public class AppConfig {  } 
    技術上の制約
    オブジェクトの伝送方法のパラメータは、秘密鍵を計算するための独自の方法が必要です。
    パラメータ伝達とリターンの対象としては、順序付けが可能です。
    選択を実現
    springは2つの基本的な実現を提供する:
  • javaのconcurrenthashMap
  • Ehcache
  • それらを使用する場合は、適切なCacheMangerとマネージャのエンティティのみを宣言する必要があります。
    javaのConccurrenthashMapを使用します。
    
    <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">   
    <span style="white-space:pre">  </span><property name="caches">   
    <span style="white-space:pre">    </span><set>   
    <span style="white-space:pre">      </span><bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" name="default"/>   
    <span style="white-space:pre">      </span><bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" name="dataCache"/>   
    <span style="white-space:pre">    </span></set>   
    <span style="white-space:pre">  </span></property>   
    </bean> 
    各Mangerには一つの名前が必要です。注釈で識別します。人々は一つのMangerによって複数のSimpleCacheMangerを管理できます。この実現は基本的に不要であり、外のライブラリです。
    Ehcacheを実現します
    CacheMangerを宣言する
    
    bean id="cacheManager"    
    class="org.springframework.cache.ehcache.EhCacheCacheManager">   
     <property name="cacheManager" ref="ehcache"/>   
    </bean>   
      
    <bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> 
     <property name="configLocation" value="classpath:ehcache.xml"/>  
     <property name="shared" value="true"/>   
    </bean> 
    ehcache.xmlでファイルはアプリケーションキャッシュパラメータファイルです。
    
    <ehcache xsi:noNamespaceSchemaLocation="ehcache.xsd"    
      updateCheck="true"    
      monitoring="autodetect"    
      dynamicConfig="true"    
      maxBytesLocalHeap="150M">  
      
      <diskStore path="java.io.tmpdir"/>   
      <defaultCache eternal="false"  
       maxElementsInMemory="100"    
       overflowToDisk="false"/>  
      
      <cache name="dataCache"  
       eternal="false" 
       timeToIdleSeconds="300" 
       maxBytesLocalHeap="30M" 
       timeToLiveSeconds="300" 
       overflowToDisk="true" 
       diskPersistent="false" 
       diskExpiryThreadIntervalSeconds="120" 
       memoryStoreEvictionPolicy="LRU"/> 
      </ehcache> 
    ehcacheを使うと、非常に簡単な方法で複数のキャッシュの異なるパラメータを定義できます。
    名前:キャッシュの識別子
    maxBytes Local Heap:キャッシュを定義して仮想マシンのバイト数を使用することができます。もう一つのCacheManager maxBytes Local Heapが設定されていると、キャッシュの決定されたサイズは減算されます。その他のキャッシュ共有の休憩。この属性の値は、データ<番号>K𞓜M 124; Gは千バイト(K 124; K)、メガバイト(M 124; M)またはギガバイト(G 124; G)を表す。
    恒久:要素が恒久的かどうかを定義します。このような場合、タイムアウトは無視されます。このプロジェクトはいつまでも期限が切れません。
    timeToIdleSeconds:これは秒数で、このプロジェクトは彼の前回のutilisation.Laのデフォルト値から0住で、元素は静止を維持します。
    timeToLiveSeconds:これは秒数です。このプロジェクトはcache.Laのデフォルト値から0を創造しました。このプロジェクトは永遠に生きています。
    memory Store EnitionPolicy略奪政策:LRU-最近は最も少なく使われています。よく使われていないFIFO-先入先出で、作成日によって一番古い元素です。
    diskyExpiry ThreadInterval Seconds:の償還プロセスは、2つの動作の間の秒数を制御します。
    diskyPersistent:ディスク上に記憶されている仮想マシンの2試合間のオブジェクト回復を許可します。
    overflowToDisk:オブジェクトがディスクに記憶されているかどうかを判定する場合、最大の記憶素子に到達する
    まとめは簡単な数学式を使います。expirationTime = Math.min((creationTime + timeToLive),(mostRecentTime + timeToIdle))締め括りをつける
    以上が本論文のspringキャッシュコードについての詳細な内容です。興味のある方は引き続き当駅の他のテーマを参照してください。友達のサポートに感謝します。