中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

在springboot使用spring 如何實現緩存cache

發布時間:2020-11-18 16:06:43 來源:億速云 閱讀:246 作者:Leah 欄目:編程語言

本篇文章為大家展示了在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

会泽县| 鹿泉市| 秭归县| 奈曼旗| 东乡| 江西省| 黄骅市| 营山县| 朝阳市| 万全县| 乌鲁木齐县| 甘南县| 曲周县| 沧源| 黄龙县| 乐业县| 偏关县| 永和县| 四会市| 拜城县| 东乌珠穆沁旗| 沛县| 郁南县| 宜兴市| 祁阳县| 天长市| 梓潼县| 辽宁省| 麻城市| 乐山市| 应城市| 蓬溪县| 桂平市| 陇川县| 仁怀市| 忻城县| 古浪县| 九龙城区| 浮山县| 若羌县| 梓潼县|