layering-cache
layering-cache是一個支援分散式環境的多級快取框架,使用方式和spring-cache類似,主要目的是在使用註解的時候支援配置過期時間。
layering-cache其實是一個兩級快取,一級快取使用Caffeine作為本地快取,二級快取使用redis作為集中式快取。並且基於redis的Pub/Sub做快取的刪除,所以它是一個適用於分散式環境下的一個快取系統。
支援支援快取監控統計支援快取過期時間在註解上直接配置支援二級快取的自動重新整理(當快取命中並發現快取將要過期時會開啟一個非同步執行緒重新整理快取)重新整理快取分為強重新整理和軟重新整理,強重新整理直接呼叫快取方法,軟重新整理直接改快取的時間快取Key支援SpEL表示式新增FastJsonRedisSerializer,KryoRedisSerializer序列化,重寫String序列化。支援同一個快取名稱設定不同的過期時間輸出INFO級別的監控統計日誌二級快取是否允許快取NULL值支援配置二級快取空值允許配置時間倍率快速開始整合 Spring 4.x
引入layering-cachemaven 方式<dependency> <groupId>com.github.xiaolyuh</groupId> <artifactId>layering-cache-aspectj</artifactId> <version>${layering.version}</version></dependency>gradle 方式
compile 'com.github.xiaolyuh:layering-cache:${layering.version}'
宣告RedisTemplate
如果專案中沒有宣告RedisTemplate Bean 可以參考下面連結 宣告RedisTemplate
宣告CacheManager和LayeringAspect
/** * 多級快取配置 * * @author yuhao.wang3 */@Configuration@EnableAspectJAutoProxypublic class CacheConfig { @Bean public CacheManager cacheManager(RedisTemplate<String, Object> redisTemplate) { return new LayeringCacheManager(redisTemplate); } @Bean public LayeringAspect layeringAspect() { return new LayeringAspect(); }}
整合 Spring Boot
引入layering-cache 就可以了
<dependency> <groupId>com.github.xiaolyuh</groupId> <artifactId>layering-cache-starter</artifactId> <version>${layering.version}</version></dependency>使用
註解形式
直接在需要快取的方法上加上Cacheable、CacheEvict、CachePut註解。
Cacheable註解@Cacheable(value = "user:info", depict = "使用者資訊快取",\t\tfirstCache = @FirstCache(expireTime = 4, timeUnit = TimeUnit.SECONDS),\t\tsecondaryCache = @SecondaryCache(expireTime = 10, preloadTime = 3, forceRefresh = true, timeUnit = TimeUnit.SECONDS))public User getUser(User user) {\tlogger.debug("呼叫方法獲取使用者名稱稱");\treturn user;}CachePut註解
@CachePut(value = "user:info", key = "#userId", depict = "使用者資訊快取",\t\tfirstCache = @FirstCache(expireTime = 4, timeUnit = TimeUnit.SECONDS),\t\tsecondaryCache = @SecondaryCache(expireTime = 10, preloadTime = 3, forceRefresh = true, timeUnit = TimeUnit.SECONDS))public User putUser(long userId) {\tUser user = new User();\tuser.setUserId(userId);\tuser.setAge(31);\tuser.setLastName(new String[]{"w", "y", "h"});\treturn user;}CacheEvict註解
@CacheEvict(value = "user:info", key = "#userId")public void evictUser(long userId) {}@CacheEvict(value = "user:info", allEntries = true)public void evictAllUser() {}
更多使用方法可以檢視官方文件
開源地址:https://gitee.com/xiaolyuh/layering-cache
更多更優質的資訊,請關注我,你的支援會鼓勵我不斷分享更多更好的優質文章。
最新評論
延伸閱讀