SpringCacheを使用してspringboot()

1.なぜキャッシュを使うのか?

私の理解では、それが再び時間がかかることが、我々は時間のデータを取ることができるように、データがキャッシュになります、あなたが頻繁にデータベースからデータをフェッチする場合、圧力は速度を取る、あまりにも偉大であることをデータベースが低下することですキャッシュが見つからない場合、それはシステム全体の量を対応するデータベースのストレス、増加効率と並行性を減らすのに有効であることができるようにデータベースを取る行く、キャッシュを見つけます。

どのような状況下2.使用キャッシングには適していませんか?

  • 頻繁な更新は、更新頻度が高すぎるデータのため、キャッシュ内のコストデータが頻繁にクエリをもたらしキャッシュから同等のかもしれない利益を費やして同期されています。一言で言えばメリットとデメリットのバランス、および、電源が到着していなかったですさらに悪い状況、です。
  • 要求の厳しい一貫性
  • 非常に小さなシステムを読み取るため、あまり読んで、キャッシュの使用は、すべての後に、目的は、キャッシュがより効率的にデータを読み込む使用することで、完全に無意味です。
  • データの量は、データベース自体がサポートできるので、もちろん、キャッシュを使用する必要はありませんでした、小さいです。

の春のキャッシュなし3

情報クエリの各部分、ログ出力

 for(int i = 0 ;i < 10 ;i++){
            cs.querySingleCategory(i);
        }
@Service
public class categoryService {

    @Autowired
            private categoryMapper cm;
    Logger logger = LoggerFactory.getLogger(categoryService.class);

    //查询category
    public void querySingleCategory(int id){
        sleepTime();
        Category c = cm.querySingleCategory(id);
        logger.info(c.getName());
    }

   
    //每次查询都要等待一秒钟
    private void sleepTime() {
        try {
            long time = 1000L;
            Thread.sleep(time);
        } catch (InterruptedException e) {
            throw new IllegalStateException(e);
        }

コードの一部が接続されていない、バックリンクを添付します
1秒にクエリに関するログ出力情報を表示するには、今
ここに画像を挿入説明
4.春のキャッシュケース

まずオープンSpringCache、Applicationクラスの上で注釈を追加
@EnableCaching

そして、あなたは**上記の方法に加え** @キャッシング可能(「キャッシュ名」)をキャッシュする必要があります

最初のクエリキャッシュは、クエリの値が含まれていないか、データベースにピックアップされます。毎回ので鐘は1秒のままになります。
ここに画像を挿入説明
2番目のクエリ、それはデータベースを介して行くことはありませんので、それは、キャッシュに取り出されているので、あなたがすぐにチェックアウトすることができます
ここに画像を挿入説明
5. @CacheEvict(「キャッシュ名」)は、データキャッシュを削除します

最初に使用@CacheEvictないので、唯一のデータベース内のデータを削除し、ログをプリントアウトすることができるように、キャッシュ内のデータが、除去されていない、または

   //删除category,没有删除缓存中的数据
    public void delete(int id){

        cm.deleteCategory(id);
    }

データベースが削除された
blog.csdnimg.cn/20200209190842396.png)
が、まだログをプリントアウトすることができ
ここに画像を挿入説明
、IDを横断するとき、クエリに基づいて例外があった一方で、キャッシュ内のデータが削除されるように、@CacheEvictを使用して、第2回

//再次删除,删除了缓存中的数据
@CacheEvict("categoryCache")
public void notDeleteCache(int id){

    cm.deleteCategory(id);
}

ここに画像を挿入説明

6. @ CachePut

@CachePutの役割は非常に類似しており、@Cacheableです

違いがある:
@CachePut:注意このメソッドは、メソッドの戻り値は、キャッシュ内に記録されている間、それを確実にするために行われます。

@Cacheable:メソッドを呼び出した同じ引数を繰り返した場合、法そのものであることを、実行するために呼び出されることはありません、メソッドの結果によって置き換えられ自体はスキップされているメソッドは、キャッシュと返さから直接発見しました。

7. Aのの概要
上記既に知っている** @ EnableCaching、@キャッシュ可能、@ CacheEvict、@ CachePut **

我々は、彼らが唯一のパラメータである場合@ CacheEvict、@ CachePut、上にキャッシュ可能@使用categoryCache、上記方法と同様に、これは、パラメータのセットに相当するパラメータIDを表すキーメソッドによって返された値が示されるそのようなキーと値のペアが複数含まれ、このセットは、複数組を含むことができます。

これらのアノテーション次のいずれかの特定のパラメータを説明します。

次のようにそのため、上記ソースリンクがある:
//download.csdn.net/download/m0_45025658/12146221

公開された33元の記事 ウォンの賞賛1 ビュー2053

おすすめ

転載: blog.csdn.net/m0_45025658/article/details/104217082