摘要:本文介紹如何在中使用默認(rèn)的聲明式緩存定義和接口用來(lái)統(tǒng)一不同的緩存技術(shù)。在使用集成的時(shí)候,我們需要注冊(cè)實(shí)現(xiàn)的的。默認(rèn)使用在我們不使用其他第三方緩存依賴(lài)的時(shí)候,自動(dòng)采用作為緩存管理器。源碼下載參考資料揭秘與實(shí)戰(zhàn)二數(shù)據(jù)緩存篇快速入門(mén)
本文介紹如何在springboot中使用默認(rèn)的spring cache
聲明式緩存Spring 定義 CacheManager 和 Cache 接口用來(lái)統(tǒng)一不同的緩存技術(shù)。例如 JCache、 EhCache、 Hazelcast、 Guava、 Redis 等。在使用 Spring 集成 Cache 的時(shí)候,我們需要注冊(cè)實(shí)現(xiàn)的 CacheManager 的 Bean。
Spring Boot 為我們自動(dòng)配置了 JcacheCacheConfiguration、 EhCacheCacheConfiguration、HazelcastCacheConfiguration、GuavaCacheConfiguration、RedisCacheConfiguration、SimpleCacheConfiguration 等。
默認(rèn)使用 ConcurrenMapCacheManager在我們不使用其他第三方緩存依賴(lài)的時(shí)候,springboot自動(dòng)采用ConcurrenMapCacheManager作為緩存管理器。
環(huán)境依賴(lài)在pom文件引入spring-boot-starter-cache環(huán)境依賴(lài):
創(chuàng)建一個(gè)book數(shù)據(jù)訪(fǎng)問(wèn)層org.springframework.boot spring-boot-starter-cache
先創(chuàng)建一個(gè)實(shí)體類(lèi)
public class Book { private String isbn; private String title; public Book(String isbn, String title) { this.isbn = isbn; this.title = title; } ….getter ….setter }創(chuàng)建一個(gè)數(shù)據(jù)訪(fǎng)問(wèn)接口
public interface BookRepository { Book getByIsbn(String isbn); }
這個(gè)你可以寫(xiě)一個(gè)很復(fù)雜的數(shù)據(jù)查詢(xún)操作,比如操作mysql、nosql等等。為了演示這個(gè)栗子,我只做了一下線(xiàn)程的延遲操作,當(dāng)作是查詢(xún)數(shù)據(jù)庫(kù)的時(shí)間。
實(shí)現(xiàn)接口類(lèi)@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); } } }測(cè)試類(lèi)
@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")); } }
啟動(dòng)程序,你會(huì)發(fā)現(xiàn)程序在控制臺(tái)依次打印了:
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’}
你會(huì)發(fā)現(xiàn)程序依次3s打印一行日志。這時(shí)還沒(méi)開(kāi)啟緩存技術(shù)。
開(kāi)啟緩存技術(shù)在程序的入口中加入@ EnableCaching開(kāi)啟緩存技術(shù):
@SpringBootApplication @EnableCaching public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
在需要緩存的地方加入@Cacheable注解,比如在getByIsbn()方法上加入@Cacheable(“books”),這個(gè)方法就開(kāi)啟了緩存策略,當(dāng)緩存有這個(gè)數(shù)據(jù)的時(shí)候,會(huì)直接返回?cái)?shù)據(jù),不會(huì)等待去查詢(xún)數(shù)據(jù)庫(kù)。
@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); } } }
這時(shí)再啟動(dòng)程序,你會(huì)發(fā)現(xiàn)程序打?。?/p>
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個(gè)數(shù)據(jù),程序等了3s,之后的數(shù)據(jù)瞬間打印在控制臺(tái)上了,這說(shuō)明緩存起了作用。
源碼下載:https://github.com/forezp/Spr...
參考資料caching
Spring Boot 揭秘與實(shí)戰(zhàn)(二) 數(shù)據(jù)緩存篇 - 快速入門(mén)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/67815.html
摘要:另一種就是用中的位于包下,本質(zhì)是由和實(shí)現(xiàn)的阻塞優(yōu)先級(jí)隊(duì)列。表明了一條消息可在隊(duì)列中存活的最大時(shí)間。當(dāng)某條消息被設(shè)置了或者當(dāng)某條消息進(jìn)入了設(shè)置了的隊(duì)列時(shí),這條消息會(huì)在時(shí)間后死亡成為。 SpringBoot 是為了簡(jiǎn)化 Spring 應(yīng)用的創(chuàng)建、運(yùn)行、調(diào)試、部署等一系列問(wèn)題而誕生的產(chǎn)物,自動(dòng)裝配的特性讓我們可以更好的關(guān)注業(yè)務(wù)本身而不是外部的XML配置,我們只需遵循規(guī)范,引入相關(guān)的依賴(lài)就可...
摘要:如果去掉,你會(huì)發(fā)現(xiàn),執(zhí)行這三個(gè)方法都在線(xiàn)程中執(zhí)行。耗時(shí)總結(jié),如下耗時(shí)通過(guò)這一個(gè)小的栗子,你應(yīng)該對(duì)異步任務(wù)有了一定的了解。 這篇文章主要介紹在springboot 使用異步方法,去請(qǐng)求github api. 創(chuàng)建工程 在pom文件引入相關(guān)依賴(lài): org.springframework.boot spring-boot-starter ...
摘要:特點(diǎn)具備相當(dāng)?shù)暮玫撵`活性,不僅能夠使用來(lái)定義緩存的和各種,還提供開(kāi)箱即用的緩存臨時(shí)存儲(chǔ)方案,也支持和主流的專(zhuān)業(yè)緩存例如的集成。其中號(hào)代表這是一個(gè)表達(dá)式,此表達(dá)式可以遍歷方法的參數(shù)對(duì)象,具體語(yǔ)法可以參考的相關(guān)文檔手冊(cè)。 SpringBoot 是為了簡(jiǎn)化 Spring 應(yīng)用的創(chuàng)建、運(yùn)行、調(diào)試、部署等一系列問(wèn)題而誕生的產(chǎn)物,自動(dòng)裝配的特性讓我們可以更好的關(guān)注業(yè)務(wù)本身而不是外部的XML配置,...
摘要:特點(diǎn)具備相當(dāng)?shù)暮玫撵`活性,不僅能夠使用來(lái)定義緩存的和各種,還提供開(kāi)箱即用的緩存臨時(shí)存儲(chǔ)方案,也支持和主流的專(zhuān)業(yè)緩存例如的集成。其中號(hào)代表這是一個(gè)表達(dá)式,此表達(dá)式可以遍歷方法的參數(shù)對(duì)象,具體語(yǔ)法可以參考的相關(guān)文檔手冊(cè)。 SpringBoot 是為了簡(jiǎn)化 Spring 應(yīng)用的創(chuàng)建、運(yùn)行、調(diào)試、部署等一系列問(wèn)題而誕生的產(chǎn)物,自動(dòng)裝配的特性讓我們可以更好的關(guān)注業(yè)務(wù)本身而不是外部的XML配置,...
閱讀 2580·2021-11-24 09:38
閱讀 2612·2019-08-30 15:54
閱讀 926·2019-08-30 15:52
閱讀 1915·2019-08-30 15:44
閱讀 2721·2019-08-30 13:48
閱讀 776·2019-08-29 16:21
閱讀 1006·2019-08-29 14:03
閱讀 2221·2019-08-28 18:15