91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-12-02 17:03:13 來源:億速云 閱讀:268 作者:柒染 欄目:大數據

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

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

性能比較

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

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

100%的讀操作

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

讀75% 寫25%

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

寫100%

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

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

 

在Matrix-Web中使用Caffeine

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

<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>${caffeine.version}</version>
</dependency>
 

創建一個抽象類AbstractCaffineCache,該類使用范型來約束緩存的數據類型,并實現了三個方法,put、get、clear。

public abstract class AbstractCaffineCache<T> {

    protected LoadingCache<String, T> loadingCache;


    abstract LoadingCache<String, T>  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;
    }

}
 

創建UserRolePermissionCache的緩存類,該類緩存類用戶的信息、用戶的角色信息、用戶的權限信息。創建LoadingCache類,該類設置了緩存過期的時間,最大的緩存個數。

public class UserRolePermissionCache<SysUser> extends AbstractCaffineCache {

    @Override
    LoadingCache createLoadingCache() {

         loadingCache = Caffeine.newBuilder()
                .expireAfterWrite(10 , TimeUnit.MINUTES)
                .initialCapacity(10)
                .maximumSize(99999999)
                .recordStats()
                .build(new CacheLoader<String, SysUser>() {
                    @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信息,如果緩存中有數據,則在緩存中取,如果沒有,則在數據庫中讀,并做緩存。


@Component
public class UserPermissonService {

    @Autowired
    SysUserMapper sysUserMapper;

    @Autowired
    UserRolePermissionCache<SysUser> 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;
    }
}

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洪湖市| 武宁县| 铜山县| 鹤岗市| 大厂| 亳州市| 峨眉山市| 乐至县| 瑞昌市| 安化县| 台湾省| 东乡| 漠河县| 郓城县| 阳新县| 隆安县| 罗江县| 乃东县| 怀安县| 东丰县| 巨鹿县| 裕民县| 金沙县| 茌平县| 云和县| 哈巴河县| 桃园县| 蕲春县| 建平县| 云南省| 额济纳旗| 江华| 平舆县| 镇雄县| 营口市| 黎平县| 中西区| 太原市| 和龙市| 太白县| 绥江县|