Java框架java真正的缓存之王,效率直接上来了
介绍语
本号主要是Java常用关键技术点,通用工具类的分享;以及springbootspringcloudMybatisplusdruidmysqlredisswaggermavendocker等集成框架的技术分享;datax、kafka、flink等大数据处理框架的技术分享。文章会不断更新,欢迎码友关注点赞收藏转发!
望各位码友点击关注,冲1000粉。后面会录制一些视频教程,图文和视频结合,比如:图书介绍网站系统、抢购系统、大数据中台系统等。技术才是程序猿的最爱,码友们冲啊
如果码友觉得代码太长,可以从头到尾快速扫射一遍,了解大概即可。觉得有用后再转发收藏,以备不时之需。
正文:
CaffeineCache,它是站在巨人的肩膀上GuavaCache,借着他的思想优化了算法发展而来。当前最强本地缓存框架,不接受反驳()
CaffeineCache的github地址:
https:github。combenmanescaffeine
Caffeine的底层算法很牛比,我自己也不清楚解释不好,就不献丑了,它有各种加载策略,回收策略,可以自动刷新缓存等,功能及其强大,我只会皮毛,下面直接来一个例子importcom。github。benmanes。caffeine。cache。Cache;importcom。github。benmanes。caffeine。cache。Caffeine;importcom。github。benmanes。caffeine。cache。LoadingCache;importjava。util。ArrayList;importjava。util。HashMap;importjava。util。List;importjava。util。Map;importjava。util。concurrent。TimeUnit;authorjava老牛publicclassCaffineCache{publicstaticvoidmain(String〔〕args){ListMapString,ObjectjavaListnewArrayList();javaList。add(newHashMapString,Object(3){{put(javaccc,abcd);put(javaaaa,求三联);put(javabbb,123);}});CaffineCache。putListByClassify(java,javaList);ListMapString,ObjectnetListnewArrayList();netList。add(newHashMapString,Object(3){{put(netccc,abcd);put(netaaa,求三联);put(netbbb,123);}});CaffineCache。putListByClassify(net,netList);ListMapString,ObjectphpListnewArrayList();phpList。add(newHashMapString,Object(3){{put(phpccc,abcd);put(phpaaa,求三联);put(phpbbb,123);}});CaffineCache。putListByClassify(php,phpList);System。out。println(netlist:);System。out。println(CaffineCache。getListByClassify(net));System。out。println(javaList);System。out。println(refreshCache。get(java));}手动创建缓存privatestaticfinalCacheString,ListMapString,ObjectARTICLELISTCACHECaffeine。newBuilder()12小时缓存过期。expireAfterWrite(12,TimeUnit。HOURS)最大缓存个数。maximumSize(1000)。build();取缓存publicstaticListMapString,ObjectgetListByClassify(Stringkey){returnARTICLELISTCACHE。getIfPresent(key);}存缓存publicstaticvoidputListByClassify(Stringkey,ListMapString,Objectvalue){ARTICLELISTCACHE。put(key,value);}privatestaticfinalLoadingCacheString,ListMapString,ObjectrefreshCacheCaffeine。newBuilder()最大缓存数。maximumSize(10000)每分钟刷新一次。refreshAfterWrite(1,TimeUnit。MINUTES)。build(CaffineCache::loadCache);privatestaticListMapString,ObjectloadCache(Stringkey){这里自动加载数据库数据到缓存,我这里直接写死咯ListMapString,ObjectjavaListnewArrayList();javaList。add(newHashMapString,Object(3){{put(javaccc,abcd);put(javaaaa,求三联);put(javabbb,123);}});returnjavaList;}}
结果打印
maven依赖包:dependencygroupIdcom。github。benmanes。caffeinegroupIdcaffeineartifactIdversion2。6。2versiondependency
鄙人编码十年多,在项目中也积累了一些工具类,很多工具类在每个项目都有在用,很实用。大部分是鄙人封装的,有些工具类是同事封装的,有些工具类已经不记得是ctrlc的还是自己封装的了,现在有空就会总结项目中大部分的工具类,分享给各位码友。如果文章中涉及的代码有侵权行为请通知鄙人处理。
计划是先把工具类整理出来,正所谓工欲善其事,必先利其器。项目中不管是普通单体项目还是多模块maven项目或是分布式微服务,一部分功能模块都是可以重用的,工具类模块就是其中之一。