您好,登錄后才能下訂單哦!
基于Java8的緩存框架Caffeine是怎樣的,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
Caffeine是一個基于Java8的高性能緩存框架,號稱趨于完美。Caffeine受啟發于Guava Cache的API,使用API和Guava是一致的。它借鑒了Guava Cache和ConcurrentLinkedHashMap的設計經驗。
基準測試使用Java microbenchmark工具提供準確的分析。緩存配置為
100%的讀操作
讀75% 寫25%
寫100%
上面三種測試圖來自于Caffeine官網,從圖可知,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;
}
}
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。