標籤:pre 類型 enable 緩衝 cache 預設 names mes tar
可以使用記憶體作為緩衝,也可以使用 Redis 作為緩衝,記憶體的弊端是叢集的多個執行個體不發同步
1,添加依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>
2,設定檔中配置 Redis 資料來源
spring.cache.redis.time-to-live:3600s # 預設不到期,設定一個時間表示到期時間redis.host=localhost # ipredis.port=6379 # 連接埠redis.jedis.pool.max-active=5 # 串連池redis.jedis.pool.max-idle=10redis.jedis.pool.max-wait=10000
3,啟動類添加 @EnableCaching 註解
4,在方法上添加 @Cacheable/@CacheEvict/@CachePut 註解或在類上添加 @CacheConfig 註解
@Cacheable 擷取緩衝(不運行方法),如果沒有就運行方法取得並把值放入緩衝
@CacheEvict 刪除緩衝(這個方法每次都會執行,然後去通過方法的傳回值去查,有就刪除)
@CachePut 更新緩衝(這個方法也是每次都執行,通過方法傳回值去查,如果有就更新,沒有就添加)
@CacheConfig 這個是寫在類上面的,用於簡化上面3個註解
樣本:
樣本1:@Cacheable(cacheNames="user", key="#id")public User getUserById(int id){}樣本2:@CachePut(cacheNames="user", key="#user.id")public User updateUserById(User user){}樣本3:@CacheEvict(cacheNames="user")public User deleteUserById(int id){}// 如果參數是基本類型,那麼 key 預設就是他,比如 樣本3 中沒有寫 key,其實和 樣本1 是一樣的樣本4:@CacheConfig("user")public class UserService{ @Cacheable public User getUserById(int id){} @CachePut(key="#user.id") public User updateUserById(User user){}}
注意:和非同步執行類似,只能在外部調用才會生效
springboot Redis 緩衝