Spring-bootキャッシュテスト

10003 ワード

需要説明
頻繁にアクセスするデータについては、データの生成に要するコストを削減するために、頻繁にアクセスするデータをキャッシュする必要がある場合があります.データキャッシュの場合、EHCache、JCache、ShiftOneなど、多くのオープンソースパケットが実現できます.以前キャッシュに関することをしたことがありますが、いくつかのオープンソースキャッシュツールを利用して、自分で単一のクラスを書いてタイミングキャッシュ機能を実現しています.今回のテストでは、spring-bootに統合されたキャッシュツールを使用して、注釈方式でデータキャッシュを実現します.テストの結果、spring-bootはキャッシュのサポートが非常に完備しており、サポートされているキャッシュ技術も多いことがわかりました.使いやすいです.
インプリメンテーション
今回のテストではspring-bootに統合されたグーグルのキャッシュ技術:guavaを使用しました.
使用する場合はpom依存をいくつか導入し、起動クラスに@EnableCaching注記を追加し、キャッシュが必要なメソッドに@Cacheable("books")注記を追加するだけです.キャッシュ時間とキャッシュサイズについては、アプリケーションで直接使用することができる.ymlで構成します.
maven依存
        
            org.springframework.boot
            spring-boot-starter-cache
        
        
            com.google.guava
            guava
            19.0
        

コード#コード#
@SpringBootApplication
@EnableCaching
public class Application {
    public static void main(String[] args){
        SpringApplication.run(Application.class,args);
    }
}

コントロール層
    @RequestMapping(value = "/cache/test",method = RequestMethod.GET)
    @ApiOperation(value = " ",notes = "")
    public Book getBook(@RequestParam()String bookName){
        return bookCache.getBook(bookName);
    }

サービス層
@Service
public class BookCache {
    public static Integer index = 0;

    @Cacheable("books")
    public Book getBook(String bookName){
        index = index + 1;
        Book book = new Book(bookName,index);
        return book;
    }
}

エンティティBookでは、コンストラクタを書き換え、新しいオブジェクトを作成するたびに印刷して出力し、テストを容易にします.
public class Book {

    public Book(String bookName,Integer index){
        System.out.println(" ");
        this.bookName = bookName;
        this.createDate = new Date();
        this.index = index;
    }

    private String bookName;
    private Date createDate;
    private Integer index;

    public Integer getIndex() {
        return index;
    }

    public void setIndex(Integer index) {
        this.index = index;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public Date getCreateDate() {
        return createDate;
    }

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
}

プロファイル
spring:
  profiles:
    active: dev
  jackson:
    serialization-inclusion: NON_NULL
    date-format: yyyy-MM-dd'T'HH:mm:ss
    time-zone: Asia/Shanghai
  cache:
    guava:
      #  
      cache-names: books
      # 500 ,   10s
      spec: maximumSize=500,expireAfterWrite=5s

プロファイルについてはあまり言わないのは明らかです.Cache-names:booksはメソッドで使用する名前と一致します.
テストとまとめ
1、私たちはcontrollerでこの要求を呼び出して、最初の呼び出しから、前の10 sの内容は、一度だけ「本を作成する」と出力して、10 s以降、再び呼び出すと、再び「本を作成する」が現れます.
2、プロファイルにキャッシュタイムを直接配置できるので、個人的には自分で書くより便利だと思います.
3、関連コードのダウンロードアドレスをテストする

Spring-bootキャッシュテスト


需要説明


頻繁にアクセスするデータについては、データの生成に要するコストを削減するために、頻繁にアクセスするデータをキャッシュする必要がある場合があります.データキャッシュの場合、EHCache、JCache、ShiftOneなど、多くのオープンソースパケットが実現できます.以前キャッシュに関することをしたことがありますが、いくつかのオープンソースキャッシュツールを利用して、自分で単一のクラスを書いてタイミングキャッシュ機能を実現しています.今回のテストでは、spring-bootに統合されたキャッシュツールを使用して、注釈方式でデータキャッシュを実現します.テストの結果、spring-bootはキャッシュのサポートが非常に完備しており、サポートされているキャッシュ技術も多いことがわかりました.使いやすいです.

インプリメンテーション


今回のテストではspring-bootに統合されたグーグルのキャッシュ技術:guavaを使用しました.
使用する場合はpom依存をいくつか導入し、起動クラスに@EnableCaching注記を追加し、キャッシュが必要なメソッドに@Cacheable("books")注記を追加するだけです.キャッシュ時間とキャッシュサイズについては、アプリケーションで直接使用することができる.ymlで構成します.
maven依存
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-cacheartifactId>
        dependency>
        <dependency>
            <groupId>com.google.guavagroupId>
            <artifactId>guavaartifactId>
            <version>19.0version>
        dependency>

コード#コード#
@SpringBootApplication
@EnableCaching
public class Application {
    public static void main(String[] args){
        SpringApplication.run(Application.class,args);
    }
}
    @RequestMapping(value = "/cache/test",method = RequestMethod.GET)
    @ApiOperation(value = " ",notes = "")
    public Book getBook(@RequestParam()String bookName){
        return bookCache.getBook(bookName);
    }

サービス層
@Service
public class BookCache {
    public static Integer index = 0;

    @Cacheable("books")
    public Book getBook(String bookName){
        index = index + 1;
        Book book = new Book(bookName,index);
        return book;
    }
}

エンティティBookでは、コンストラクタを書き換え、新しいオブジェクトを作成するたびに印刷して出力し、テストを容易にします.
public class Book {

    public Book(String bookName,Integer index){
        System.out.println(" ");
        this.bookName = bookName;
        this.createDate = new Date();
        this.index = index;
    }

    private String bookName;
    private Date createDate;
    private Integer index;

    public Integer getIndex() {
        return index;
    }

    public void setIndex(Integer index) {
        this.index = index;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public Date getCreateDate() {
        return createDate;
    }

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
}

プロファイル
spring:
  profiles:
    active: dev
  jackson:
    serialization-inclusion: NON_NULL
    date-format: yyyy-MM-dd'T'HH:mm:ss
    time-zone: Asia/Shanghai
  cache:
    guava:
      #  
      cache-names: books
      # 500 ,   10s
      spec: maximumSize=500,expireAfterWrite=5s

プロファイルについてはあまり言わないのは明らかです.Cache-names:booksはメソッドで使用する名前と一致します.

テストとまとめ


1、私たちはcontrollerでこの要求を呼び出して、最初の呼び出しから、前の10 sの内容は、一度だけ「本を作成する」と出力して、10 s以降、再び呼び出すと、再び「本を作成する」が現れます.
2、プロファイルにキャッシュタイムを直接配置できるので、個人的には自分で書くより便利だと思います.

3、関連コードのダウンロードアドレスをテストする