真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

基于Java8的緩存框架Caffeine是怎樣的

基于Java8的緩存框架Caffeine是怎樣的,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)公司從2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元謝通門做網(wǎng)站,已為上家服務(wù),為謝通門各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108

Caffeine是一個基于Java8的高性能緩存框架,號稱趨于完美。Caffeine受啟發(fā)于Guava Cache的API,使用API和Guava是一致的。它借鑒了Guava Cache和ConcurrentLinkedHashMap的設(shè)計經(jīng)驗。

性能比較

基準測試使用Java microbenchmark工具提供準確的分析。緩存配置為

  • Caffeine和ConcurrentLinkedHashMap根據(jù)CPU數(shù)量確定其內(nèi)部結(jié)構(gòu)的大小
  • Guava的并發(fā)級別配置為64(默認為4,以減少內(nèi)存使用)。
  • Ehcache v2在內(nèi)部被硬編碼為100個段,而v3未分段

100%的讀操作

基于Java8的緩存框架Caffeine是怎樣的  

讀75% 寫25%

基于Java8的緩存框架Caffeine是怎樣的  

寫100%

基于Java8的緩存框架Caffeine是怎樣的  

上面三種測試圖來自于Caffeine官網(wǎng),從圖可知,Caffeine的性能玩爆其他緩存框架。

 

在Matrix-Web中使用Caffeine

在工程的pom文件引入caffeine的依賴,如下:


com.github.ben-manes.caffeine
caffeine
${caffeine.version}

 

創(chuàng)建一個抽象類AbstractCaffineCache,該類使用范型來約束緩存的數(shù)據(jù)類型,并實現(xiàn)了三個方法,put、get、clear。

public abstract class AbstractCaffineCache {

    protected LoadingCache loadingCache;


    abstract LoadingCache  createLoadingCache();

    public boolean put(String key, T value) {
        if(loadingCache==null){
            loadingCache=createLoadingCache();
        }
        loadingCache.put(key, value);

        return Boolean.TRUE;
    }

    public T get(String key) {
        if(loadingCache==null){
            loadingCache=createLoadingCache();
        }
        try {

            return loadingCache.get(key);
        } catch (Exception e) {
            return null;
        }
    }

    public boolean clear(String key) {
        if(loadingCache==null){
            loadingCache=createLoadingCache();
        }
        loadingCache.invalidate(key);
        return Boolean.TRUE;
    }

}
 

創(chuàng)建UserRolePermissionCache的緩存類,該類緩存類用戶的信息、用戶的角色信息、用戶的權(quán)限信息。創(chuàng)建LoadingCache類,該類設(shè)置了緩存過期的時間,最大的緩存?zhèn)€數(shù)。

public class UserRolePermissionCache extends AbstractCaffineCache {

    @Override
    LoadingCache createLoadingCache() {

         loadingCache = Caffeine.newBuilder()
                .expireAfterWrite(10 , TimeUnit.MINUTES)
                .initialCapacity(10)
                .maximumSize(99999999)
                .recordStats()
                .build(new CacheLoader() {
                    @Override
                    public SysUser load(String key) throws Exception {
                        return null;
                    }
                });
        return loadingCache;
    }
}
 

將UserRolePermissionCache注入到spring ioc中,代碼如下:


@Configuration
public class CaffineCacheConfig {
    @Bean
    public UserRolePermissionCache userRolePermissionCache(){
        return new UserRolePermissionCache();
    }
}
 

如何使用,在UserPermissonService中,查詢SysUser信息,如果緩存中有數(shù)據(jù),則在緩存中取,如果沒有,則在數(shù)據(jù)庫中讀,并做緩存。


@Component
public class UserPermissonService {

    @Autowired
    SysUserMapper sysUserMapper;

    @Autowired
    UserRolePermissionCache userRolePermissionCache;

    public SysUser getUserRolePerssion(String userId) {
        SysUser sysUser = (SysUser) userRolePermissionCache.get(userId);
        if (sysUser == null) {
            sysUser = sysUserMapper.selectUserRolePermission(userId);
            userRolePermissionCache.put(userId, sysUser);
        }
        return sysUser;
    }
}

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。


新聞名稱:基于Java8的緩存框架Caffeine是怎樣的
瀏覽地址:http://weahome.cn/article/ppjpjd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部