「Java框架」java真正的緩存之王,效率直接上來了
介紹語
本號主要是Java常用關(guān)鍵技術(shù)點,通用工具類的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+docker等集成框架的技術(shù)分享;datax、kafka、flink等大數(shù)據(jù)處理框架的技術(shù)分享。文章會不斷更新,歡迎碼友關(guān)注點贊收藏轉(zhuǎn)發(fā)!
望各位碼友點擊關(guān)注,沖1000粉。后面會錄制一些視頻教程,圖文和視頻結(jié)合,比如:圖書介紹網(wǎng)站系統(tǒng)、搶購系統(tǒng)、大數(shù)據(jù)中臺系統(tǒng)等。技術(shù)才是程序猿的最愛,碼友們沖啊
如果碼友覺得代碼太長,可以從頭到尾快速掃射一遍,了解大概即可。覺得有用后再轉(zhuǎn)發(fā)收藏,以備不時之需。
正文:
Caffeine Cache,它是站在巨人的肩膀上-Guava Cache,借著他的思想優(yōu)化了算法發(fā)展而來。當前最強本地緩存框架,不接受反駁( ̄▽ ̄)"
Caffeine Cache 的github地址:
https://github.com/ben-manes/caffeine
Caffeine 的底層算法很牛比,我自己也不清楚解釋不好,就不獻丑了,它有各種加載策略,回收策略,可以自動刷新緩存等,功能及其強大,我只會皮毛,下面直接來一個例子
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
?
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
?
/**
* @author java老牛
*/
public class CaffineCache {
?
public static void main(String[] args) {
List<Map<String, Object>> javaList = new ArrayList<>();
javaList.add(new HashMap<String, Object>(3) {{
put("java-ccc", "abcd");
put("java-aaa", "求三聯(lián)");
put("java-bbb", 123);
}});
CaffineCache.putListByClassify("java", javaList);
?
List<Map<String, Object>> netList = new ArrayList<>();
netList.add(new HashMap<String, Object>(3) {{
put("net-ccc", "abcd");
put("net-aaa", "求三聯(lián)");
put("net-bbb", 123);
}});
CaffineCache.putListByClassify("net", netList);
?
List<Map<String, Object>> phpList = new ArrayList<>();
phpList.add(new HashMap<String, Object>(3) {{
put("php-ccc", "abcd");
put("php-aaa", "求三聯(lián)");
put("php-bbb", 123);
}});
CaffineCache.putListByClassify("php", phpList);
?
System.out.println("net list:");
System.out.println(CaffineCache.getListByClassify("net"));
?
System.out.println("java List");
System.out.println(refreshCache.get("java"));
?
}
?
// 手動創(chuàng)建緩存
private static final Cache<String, List<Map<String, Object>>> ARTICLE_LIST_CACHE = Caffeine.newBuilder()
// 12小時緩存過期
.expireAfterWrite(12, TimeUnit.HOURS)
// 最大緩存?zhèn)€數(shù)
.maximumSize(1000)
.build();
?
// 取緩存
public static List<Map<String, Object>> getListByClassify(String key) {
return ARTICLE_LIST_CACHE.getIfPresent(key);
}
?
// 存緩存
public static void putListByClassify(String key, List<Map<String, Object>> value) {
ARTICLE_LIST_CACHE.put(key, value);
}
?
private static final LoadingCache<String, List<Map<String, Object>>> refreshCache = Caffeine.newBuilder()
// 最大緩存數(shù)
.maximumSize(10_000)
// 每分鐘刷新一次
.refreshAfterWrite(1, TimeUnit.MINUTES)
.build(CaffineCache::loadCache);
?
private static List<Map<String, Object>> loadCache(String key) {
// 這里自動加載數(shù)據(jù)庫數(shù)據(jù)到緩存,我這里直接寫死咯
List<Map<String, Object>> javaList = new ArrayList<>();
javaList.add(new HashMap<String, Object>(3) {{
put("java-ccc", "abcd");
put("java-aaa", "求三聯(lián)");
put("java-bbb", 123);
}});
return javaList;
}
?
}
結(jié)果打印

maven依賴包:
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>2.6.2</version>
</dependency>
鄙人編碼十年多,在項目中也積累了一些工具類,很多工具類在每個項目都有在用,很實用。大部分是鄙人封裝的,有些工具類是同事封裝的,有些工具類已經(jīng)不記得是ctrl+c的還是自己封裝的了,現(xiàn)在有空就會總結(jié)項目中大部分的工具類,分享給各位碼友。如果文章中涉及的代碼有侵權(quán)行為請通知鄙人處理。
計劃是先把工具類整理出來,正所謂工欲善其事,必先利其器。項目中不管是普通單體項目還是多模塊maven項目或是分布式微服務,一部分功能模塊都是可以重用的,工具類模塊就是其中之一。

浙公網(wǎng)安備 33010602011771號