通常我們訪問數據的情況如下圖,數據存緩存就取緩存,不存緩存就取數據庫,這樣可以提升效率,不用一直讀取數據庫的信息:
開始記錄:
關於SpringBoot緩存的應用
1. 首先在pom.xml文件中添加如下:
<dependency> <!-- cache緩存 --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency>
2.在application的main方法中添加注解 @EnableCaching ,以開啟緩存注解的應用:
@SpringBootApplication @EnableCaching public class AppConfig { public static void main(String[] args) { SpringApplication.run(AppConfig.class, args); } }
3.在service等需要添加入緩存的方法前加入注解 @Cacheable (使用緩存,不調用方法)
/** * 根據ID查找用戶信息,將方法運行結果進行緩存:以后再要相同數據,直接從緩存取,不需要調用方法; */ @Cacheable(cacheNames = {"cache1"}) //cacheNames或value都可以,表示你自定義的緩存容器的名字,這里使用大括號是說明可以存在多個緩存中使用 public User findById(Integer id) { log.info("查詢 ID=" + id + " 的結果"); User byId = userDao.findById(id); return byId; }
3.1 緩存參數及條件的使用,采用pESL寫法:
// key表示該緩存的key,值是方法中的value; condition表示如果xx就使用緩存; unless表示如果xx就不使用緩存;
// 可以在condition或unless的雙引號中用and來拼各種其他條件
@Cacheable(cacheNames = {"acc"}, key= "#root.methodName",condition = "#id>2",unless = "#a0==null")
4. 在service或需要的方法前加入@CachePut注解(即調用方法,又寫數據庫),用於修改數據庫或更新緩存
@CachePut(value = "acc",key = "#user.id") public User update(User user) { System.out.println("更新信息" + user); userDao.update(user); return user; }
5.清除緩存,@CacheEvict。通常使用allEntries = true可以清除全部緩存,即不用單獨制定key
@CacheEvict(value = "acc", allEntries = true) public void delete(Integer id) { userDao.delete(id); }
6.如果需要許多條件的疊加,使用@Caching,圖示例子如下:
7. service下邊每個方法都要寫緩存名字比較麻煩,通常我們將總的名字寫在service的類前邊,@CacheConfig(cacheNames = {"emp"}),依次類推,把公共的緩存配置都寫在這里就可以了;
通常來說,我們在開發過程中,多使用的是緩存中間件,比如:Redis、memcached、ehcache等;
SpringBoot默認使用的是SimpleCacheConfiguration的配置,然而還有許多其他的配置可用,那么我們后邊來看一下Redis要如何配置。