Springboot統合jetcacheおよび応用

154785 ワード

JetCacheソースのgithub上のアドレスhttps://github.com/alibaba/jetcache
JetCacheにはJDK 1が必要です.8、Spring Framework4.0.8以降.
JetCacheはspringCacheのパッケージであり、その機能を強化している.ではJetCacheは何ができますか?(公式解釈)
より簡単で使いやすい統一APIでキャッシュを操作することで、キャッシュ実現の下位レベルの違いを遮断します.現在、4つの実装があり、Redis、Tair(この部分はgithubオープンソースではありません)、CaffeineCache、および簡単なLinkedHashMapCacheがあります.
注釈によるキャッシュインスタンスの作成と構成
注釈方式により方法としてキャッシュを追加、構成する.
2レベルまたはマルチレベルキャッシュをサポート
キャッシュ領域の統計自動リフレッシュ(2.2)非同期インタフェース(2.2、redisを使用するlutteceクライアント)この例ではCaffeineCacheとRedisの使い方を説明し,環境はSpringBootである.
mavenにはjarのサポートが追加されており、以下のように、現在著者は更新しています.
   
   
   
   
  1.   
  2.     com.alicp.jetcache
  3.     jetcache-starter-redis
  4.     2.2.0.Beta1
  5.     redis.clients
  6.     jedis
  7.     2.9.0

jedisのバージョンに注意して、低バージョンの場合は異常を報告する可能性があります.
次に、プロファイルに2つのタイプのキャッシュの構成を追加します.
   
   
   
   
  1. jetcache.statIntervalMinutes=10
  2. jetcache.hiddenPackages=com.zte
  3. jetcache.local.default.type=caffeine
  4. jetcache.local.default.limit=50
  5. jetcache.local.default.defaultExpireInMillis=300000
  6.  
  7. jetcache.remote.default.type=redis
  8. jetcache.remote.default.poolConfig.minIdle=5
  9. jetcache.remote.default.poolConfig.maxIdle=50
  10. jetcache.remote.default.poolConfig.maxTotal=100
  11. jetcache.remote.default.host=127.0.0.1
  12. jetcache.remote.default.password=zte@123
  13. jetcache.remote.default.port=6379
  14. jetcache.remote.default.defaultExpireInMillis=300000
  15. jetcache.remote.default.keyPrefix=xxPro
  16. jetcache.remote.default.keyConvertor: fastjson

構成パラメータの概要は次のとおりです.
ツールバーの
デフォルト
説明
jetcache.statIntervalMinutes
0
統計間隔、0は統計なし
jetcache.hiddenPackages
なし
@Cachedと@CreateCacheが自動的にnameを生成する場合、nameが長すぎないようにhiddenPackagesで指定したパケット名接頭辞が切り取られます
jetcache.[local|remote].${area}.type
なし
キャッシュ・タイプ.tair、redisは現在サポートされているリモートキャッシュです.linkedhashmap、caffeineは現在サポートされているローカルキャッシュタイプです
jetcache.[local|remote].${area}.keyConvertor
なし
keyコンバータ、メソッドキャッシュを使用するにはkeyConvertorを指定する必要があります.現在実装されているkeyConvertorは1つしかありません.fastjson
jetcache.[local|remote].${area}.valueEncoder
java
remoteタイプのキャッシュのみを指定する必要があります.javaとkryoを選択できます.
jetcache.[local|remote].${area}.valueDecoder
java
remoteタイプのキャッシュのみを指定する必要があります.javaとkryoを選択できます.
jetcache.[local|remote].${area}.limit
100
localタイプのキャッシュのみを指定する必要があります.各キャッシュインスタンスの最大要素を定義します.ここで100を指定し、@CreateCacheを使用して2つのキャッシュインスタンスを作成するなど、すべてではなく、各キャッシュインスタンスの制限に注意してください(localLimitプロパティは注記に設定されていません)、各キャッシュインスタンスの制限は100です.
jetcache.[local|remote].${area}.defaultExpireInMillis
無限大
ミリ秒単位でタイムアウト時間を指定します.バージョン2.2以降はexpireAfterWriteInMillisと名前を変更します.元のdefaultExpireInMillisは使用できます.
jetcache.local.${area}.expireAfterAccessInMillis
0
jetcache 2が必要です.2以上、ミリ秒単位で、どのくらいの時間にアクセスしていないかを指定すると、キャッシュが失効し、現在はローカルキャッシュのみがサポートされています.
準備万端整って使い始める
JetCacheには2つのキャッシュをサポートする方法があり、1つは方法に基づいており、1つは自分で定義して作成することができる.
1.メソッドベースのキャッシュ方式
実装方式はspring aopで、注釈方式@cacheを採用
この注釈のソースコードを見て、上のデフォルトのプロファイルの意味とその注釈の使い方を大体理解することができます.ソースコードは以下の通りです.
   
   
   
   
  1. @Documented
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Target(ElementType.METHOD)
  4. public @interface Cached {
  5.     String area() default CacheConsts.DEFAULT_AREA;
  6.     String name() default CacheConsts.UNDEFINED_STRING;
  7.     boolean enabled() default CacheConsts.DEFAULT_ENABLED;
  8.     TimeUnit timeUnit() default TimeUnit.SECONDS;
  9.     int expire() default CacheConsts.UNDEFINED_INT;
  10.     CacheType cacheType() default CacheType.REMOTE;
  11.     int localLimit() default CacheConsts.UNDEFINED_INT;
  12.     String serialPolicy() default CacheConsts.UNDEFINED_STRING;
  13.     String keyConvertor() default CacheConsts.UNDEFINED_STRING;
  14.     boolean cacheNullValue() default CacheConsts.DEFAULT_CACHE_NULL_VALUE;
  15.     /**
  16.      * Expression attribute used for conditioning the method caching.
  17.      * 

    Default is "", meaning the method is always cached.

  18.      */
  19.     String condition() default CacheConsts.UNDEFINED_STRING;
  20.     /**
  21.      * Expression attribute used to veto method caching.
  22.      * 

    Unlike {@link #condition()}, this expression is evaluated after the method

  23.      * has been called and can therefore refer to the {@code result}. Default is "",
  24.      * meaning that caching is never vetoed.
  25.      */
  26.     String unless() default CacheConsts.UNDEFINED_STRING;
  27. }

まず、メソッドの上に機能し、実行期間が機能します.この注記の下のパラメータは、すべてデフォルトの構成があります.つまり、指定しない場合、デフォルトの構成がロードされます.ビジネスで異なる方法で必要とされるexpireの時間が異なる場合は、ここで指定できます.
メソッド・ベースの注釈の使用方法は、次のとおりです.
まず、cacheへの注釈サポート-----@EnableMethodCache(basePackages="com.xx")を追加します.
後ろのパッケージ名は、この注釈を使用する方法が存在するパッケージの全パスです.
次に、この注釈をメソッドに適用します.例は次のとおりです.
   
   
   
   
  1. @Cached(name="xxx.xxx.xx",expire=30,timeUnit=TimeUnit.MINUTES)
  2. public Page<Project> xxxxxxxx(String type,Pageable pageable){
  3. return repository.xxxxxx(type,pageable);
  4. }

2.キャッシュのカスタマイズ方法
JetCacheでは@createCacheの注釈のサポートを提供しています.自分で定義できるcacheは柔軟性が高いので、具体的な使い方を説明します.
createCacheのサポートに参加---@EnableCreateCacheAnnotation
必要に応じてcacheを独自に定義します.サンプルコードは次のとおりです.
   
   
   
   
  1. @CreateCache
  2. Cache<String, Object> jetcache;

使用方法:
   
   
   
   
  1. if (jetcache.get("project_"+project.getId())==null) {
  2. parent=xxxxService.find((long)xxxxxx.getParentId());
  3. jetcache.put("project_"+project.getId(), parent);
  4. }else{
  5. parent=(Project) jetcache.get("project_"+project.getId());
  6. }

使い方はMapと似ています.
説明しなければならないのはJetCacheが2次キャッシュをサポートしており、cacheTypeで直接設定でき、柔軟性が高いことです.
プロジェクトの例を挙げる
プロファイルにはredisとcaffeineの2種類が設定されており、コードのcacheTypeでキャッシュをどこに置くかを設定できます.
JetCacheにはもう一つの利点があります.これも応用後に何気なく発見されたものです.それはJetCacheの統計レポート機能です.あまり話さないで、次のコードを見てわかります.
   
   
   
   
  1. cache                                                            |       qps|   rate|           get|           hit|          fail|        expire|avgLoadTime|maxLoadTime
  2. -----------------------------------------------------------------+----------+-------+--------------+--------------+--------------+--------------+-----------+-----------
  3. default_c.z.d.p.c.ProjectController.jetcache                     |      1.25|100.00%|           108|           108|             0|             0|        0.0|          0
  4. ..._c.z.d.p.s.p.i.ProjectServiceImpl.findByDevopsId(Lj.l.String;)|      0.17|100.00%|            14|            14|             0|             0|        0.0|          0
  5. default_c.z.d.p.s.p.i.ProjectServiceImpl.getNewProjects()        |      0.02|100.00%|             2|             2|             0|             0|        0.0|          0
  6. ...ctServiceImpl.getProjectByType(Lj.l.String;Lo.s.d.d.Pageable;)|      0.02|100.00%|             2|             2|             0|             0|        0.0|          0
  7. -----------------------------------------------------------------+----------+-------+--------------+--------------+--------------+--------------+-----------+-----------