亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot如何集成spring cache

發布時間:2021-12-16 17:17:20 來源:億速云 閱讀:120 作者:小新 欄目:大數據

這篇文章給大家分享的是有關springboot如何集成spring cache的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

聲明式緩存

Spring 定義 CacheManager 和 Cache 接口用來統一不同的緩存技術。例如 JCache、 EhCache、 Hazelcast、 Guava、 Redis 等。在使用 Spring 集成 Cache 的時候,我們需要注冊實現的 CacheManager 的 Bean。

Spring Boot 為我們自動配置了 JcacheCacheConfiguration、 EhCacheCacheConfiguration、HazelcastCacheConfiguration、GuavaCacheConfiguration、RedisCacheConfiguration、SimpleCacheConfiguration 等。

默認使用 ConcurrenMapCacheManager

在我們不使用其他第三方緩存依賴的時候,springboot自動采用ConcurrenMapCacheManager作為緩存管理器。

環境依賴

在pom文件引入spring-boot-starter-cache環境依賴:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

創建一個book數據訪問層

先創建一個實體類

 public class Book {

    private String isbn;
    private String title;

    public Book(String isbn, String title) {
        this.isbn = isbn;
        this.title = title;
    }
  ....getter
  ....setter  

 }

創建一個數據訪問接口

public interface BookRepository {

    Book getByIsbn(String isbn);

}

這個你可以寫一個很復雜的數據查詢操作,比如操作mysqlnosql等等。為了演示這個栗子,我只做了一下線程的延遲操作,當作是查詢數據庫的時間。

實現接口類:

@Component
public class SimpleBookRepository implements BookRepository {

    @Override

    public Book getByIsbn(String isbn) {
        simulateSlowService();
        return new Book(isbn, "Some book");
    }

    // Don't do this at home
    private void simulateSlowService() {
        try {
            long time = 3000L;
            Thread.sleep(time);
        } catch (InterruptedException e) {
            throw new IllegalStateException(e);
        }
    }

}

測試類

@Component
public class AppRunner implements CommandLineRunner {

    private static final Logger logger = LoggerFactory.getLogger(AppRunner.class);

    private final BookRepository bookRepository;

    public AppRunner(BookRepository bookRepository) {
        this.bookRepository = bookRepository;
    }

    @Override
    public void run(String... args) throws Exception {
        logger.info(".... Fetching books");
        logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
        logger.info("isbn-4567 -->" + bookRepository.getByIsbn("isbn-4567"));
        logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
        logger.info("isbn-4567 -->" + bookRepository.getByIsbn("isbn-4567"));
        logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
        logger.info("isbn-1234 -->" + bookRepository.getByIsbn("isbn-1234"));
    }

}

啟動程序,你會發現程序在控制臺依次打印了:

2014-06-05 12:15:35.783  … : …. Fetching books

2014-06-05 12:15:40.783  … : isbn-1234 → >Book{isbn=’isbn-1234’, title=’Some book’}

2014-06-05 12:15:43.784  … : isbn-1234 →Book{isbn=’isbn-1234’, title=’Some book’}

2014-06-05 12:15:46.786  … : isbn-1234 →Book{isbn=’isbn-1234’, title=’Some book’}

你會發現程序依次3s打印一行日志。這時還沒開啟緩存技術。

開啟緩存技術

在程序的入口中加入@ EnableCaching開啟緩存技術:

@SpringBootApplication
@EnableCaching
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

在需要緩存的地方加入@Cacheable注解,比如在getByIsbn()方法上加入@Cacheable(“books”),這個方法就開啟了緩存策略,當緩存有這個數據的時候,會直接返回數據,不會等待去查詢數據庫。

@Component
public class SimpleBookRepository implements BookRepository {

    @Override
    @Cacheable("books")
    public Book getByIsbn(String isbn) {
        simulateSlowService();
        return new Book(isbn, "Some book");
    }

    // Don't do this at home
    private void simulateSlowService() {
        try {
            long time = 3000L;
            Thread.sleep(time);
        } catch (InterruptedException e) {
            throw new IllegalStateException(e);
        }
    }

}

這時再啟動程序,你會發現程序打印:

isbn-1234 →Book{isbn=’isbn-1234’, title=’Some book’}
2017-04-23 18:17:09.479  INFO 8054 —- [           main] forezp.AppRunner                         : isbn-4567 →Book{isbn=’isbn-4567’, title=’Some book’}
2017-04-23 18:17:09.480  INFO 8054 —- [           main] forezp.AppRunner                         : isbn-1234 →Book{isbn=’isbn-1234’, title=’Some book’}
2017-04-23 18:17:09.480  INFO 8054 —- [           main] forezp.AppRunner                         : isbn-4567 →Book{isbn=’isbn-4567’, title=’Some book’}
2017-04-23 18:17:09.481  INFO 8054 —- [           main] forezp.AppRunner                         : isbn-1234 →Book{isbn=’isbn-1234’, title=’Some book’}
2017-04-23 18:17:09.481  INFO 8054 —- [           main] forezp.AppRunner                         : isbn-1234 →Book{isbn=’isbn-1234’, title=’Some book’}

只有打印前面2個數據,程序等了3s,之后的數據瞬間打印在控制臺上了,這說明緩存起了作用。

感謝各位的閱讀!關于“springboot如何集成spring cache”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁陵县| 广昌县| 宣城市| 台中县| 顺义区| 宜兰市| 丰顺县| 闵行区| 和田市| 海宁市| 紫金县| 眉山市| 邻水| 凤庆县| 河津市| 新邵县| 鞍山市| 赤城县| 嫩江县| 泰宁县| 巢湖市| 朝阳市| 房产| 崇礼县| 永仁县| 汝阳县| 溧阳市| 文安县| 岑溪市| 武平县| 若尔盖县| 平原县| 灵寿县| 巴东县| 于田县| 东阿县| 绵竹市| 双江| 三门县| 岐山县| 宣武区|