Spring 定義 CacheManager 和 Cache 接口用來統一不一樣的緩存技術。例如 JCache、 EhCache、 Hazelcast、 Guava、 Redis 等。在使用 Spring 集成 Cache 的時候,咱們須要註冊實現的 CacheManager 的 Bean。html
Spring Boot 爲咱們自動配置了 JcacheCacheConfiguration、 EhCacheCacheConfiguration、HazelcastCacheConfiguration、GuavaCacheConfiguration、RedisCacheConfiguration、SimpleCacheConfiguration 等。mysql
在咱們不使用其餘第三方緩存依賴的時候,springboot自動採用ConcurrenMapCacheManager做爲緩存管理器。spring
在pom文件引入spring-boot-starter-cache環境依賴:sql
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency>
「`數據庫
public class Book {緩存
private String isbn; private String title; public Book(String isbn, String title) { this.isbn = isbn; this.title = title; }
….getter
….setterspringboot
} nosql
建立一個數據訪問接口ide
public interface BookRepository { Book getByIsbn(String isbn); }
這個你能夠寫一個很複雜的數據查詢操做,好比操做mysql、nosql等等。爲了演示這個栗子,我只作了一下線程的延遲操做,看成是查詢數據庫的時間。spring-boot
實現接口類:
@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打印一行日誌。這時還沒開啓緩存技術。