註解: @Cacheable // 在方法調用前,先在緩存中去找,若沒有,則在方法調用結束後,放到緩存中,屬性cacheNames、key。key中可以使用SpEl表達式,如#id,#root.args[0] @CachePut // 每次調用方法,都會刷新緩存。預設是調用方法後刷新;屬性可以使用 ...
註解:
@Cacheable // 在方法調用前,先在緩存中去找,若沒有,則在方法調用結束後,放到緩存中,屬性cacheNames、key。key中可以使用SpEl表達式,如#id,#root.args[0]
@CachePut // 每次調用方法,都會刷新緩存。預設是調用方法後刷新;屬性可以使用 #result.xx
@CacheEvict // 清楚緩存
@Caching // 複雜的配置邏輯
@CacheConfig // 抽取出同一個service中共同的配置
SpringBoot-cache緩存原理:
1、自動配置類;CacheAutoConfiguration
2、緩存的配置類
org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration
org.springframework.boot.autoconfigure.cache.JCacheCacheConfiguration
org.springframework.boot.autoconfigure.cache.EhCacheCacheConfiguration
org.springframework.boot.autoconfigure.cache.HazelcastCacheConfiguration
org.springframework.boot.autoconfigure.cache.InfinispanCacheConfiguration
org.springframework.boot.autoconfigure.cache.CouchbaseCacheConfiguration
org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration
org.springframework.boot.autoconfigure.cache.CaffeineCacheConfiguration
org.springframework.boot.autoconfigure.cache.GuavaCacheConfiguration
org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration【預設】
org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration
3、哪個配置類預設生效:SimpleCacheConfiguration;
4、SimpleCacheConfiguration給容器中註入了一個CacheManager:ConcurrentMapCacheManager
5、ConcurrentMapCacheManager可以獲取和創建ConcurrentMapCache類型的緩存組件;他的作用將數據保存在ConcurrentMap中;
預設使用的是ConcurrentMapCacheManager==ConcurrentMapCache;將數據保存在 ConcurrentMap<Object, Object>中
開發中使用緩存中間件;redis、memcached、ehcache;
整合redis作為緩存
Redis 是一個開源(BSD許可)的,記憶體中的數據結構存儲系統,它可以用作資料庫、緩存和消息中間件。
1、安裝redis:使用docker;
2、引入redis的starter
3、配置redis
4、測試緩存
原理:CacheManager===Cache 緩存組件來實際給緩存中存取數據
1)、引入redis的starter,容器中保存的是 RedisCacheManager;
2)、RedisCacheManager 幫我們創建 RedisCache 來作為緩存組件;RedisCache通過操作redis緩存數據的
3)、預設保存數據 k-v 都是Object;利用序列化保存;當key-value都是Object的時候,會使用序列化保存,預設是使用JDK的序列化機制
如何保存為json
1、引入了redis的starter,cacheManager變為 RedisCacheManager;
2、預設創建的 RedisCacheManager 操作redis的時候使用的是 RedisTemplate<Object, Object>
3、RedisTemplate<Object, Object> 是 預設使用jdk的序列化機制
4)、自定義CacheManager;
5)、key值命名;
//存到redis的key值會多一個首碼,預設會將CacheName作為Key的首碼
cacheManager.setUsePrefix(true);