本篇文章為大家展示了在springboot使用spring 如何實(shí)現(xiàn)緩存cache,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
府谷網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)成立于2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
聲明式緩存
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
在我們不使用其他第三方緩存依賴的時(shí)候,springboot自動(dòng)采用ConcurrenMapCacheManager作為緩存管理器。
環(huán)境依賴
在pom文件引入spring-boot-starter-cache環(huán)境依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency>
創(chuàng)建一個(gè)book數(shù)據(jù)訪問(wèn)層
先創(chuàng)建一個(gè)實(shí)體類
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ù)訪問(wèn)接口
public interface BookRepository { Book getByIsbn(String isbn); }
這個(gè)你可以寫(xiě)一個(gè)很復(fù)雜的數(shù)據(jù)查詢操作,比如操作MySQL、NOSQL等等。為了演示這個(gè)栗子,我只做了一下線程的延遲操作,當(dāng)作是查詢數(shù)據(jù)庫(kù)的時(shí)間。
實(shí)現(xiàn)接口類:
@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è)試類
@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ì)等待去查詢數(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ō)明緩存起了作用。
上述內(nèi)容就是在springboot使用spring 如何實(shí)現(xiàn)緩存cache,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
分享標(biāo)題:在springboot使用spring如何實(shí)現(xiàn)緩存cache
URL分享:http://chinadenli.net/article20/giipco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、服務(wù)器托管、商城網(wǎng)站、網(wǎng)站改版、品牌網(wǎng)站設(shè)計(jì)、App開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)