查询带参接口引入本地缓存

try{
String videoCacheKey = String.format(CacheKeyManager.VIDEO_DETAIL,videoId);

Object cacheObj = baseCache.getOneHourCache().get( videoCacheKey ,()->{
Video video = videoMapper.findDetailById(videoId);
return video;
});
if (cacheObj instanceof Video){
Video video = (Video)cacheObj;
return video;
}
}catch (Exception e){
e.printStackTrace();
}
return null;


管理类
/**
* 缓存key管理类
*/
public class CacheKeyManager {
/**
* 首页轮播图
*/
public static final String INDEX_BANNER_KEY = "index:banner:list";
public static final String INDEX_VIDEO_LIST = "index:video:list";

/**
* 带参加 %s
*/
public static final String VIDEO_DETAIL = "video:detail:%s";
}

工具类

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;


@Component
public class BaseCache {

private Cache<String,Object> cache = CacheBuilder.newBuilder()
//初始大小
.initialCapacity(10)
//最大值
.maximumSize(100)
//并发数
.concurrencyLevel(5)
//缓存过期时间
.expireAfterWrite(600, TimeUnit.SECONDS)
//缓存命中率
.recordStats()
.build();

private Cache<String,Object> oneHourCache = CacheBuilder.newBuilder()
//初始大小
.initialCapacity(10)
//最大值
.maximumSize(100)
//并发数
.concurrencyLevel(5)
//缓存过期时间
.expireAfterWrite(3600, TimeUnit.SECONDS)
//缓存命中率
.recordStats()
.build();

public Cache<String, Object> getOneHourCache() {
return oneHourCache;
}

public void setOneHourCache(Cache<String, Object> oneHourCache) {
this.oneHourCache = oneHourCache;
}

public Cache<String, Object> getCache() {
return cache;
}

public void setCache(Cache<String, Object> cache) {
this.cache = cache;
}
}
上一篇:强缓存和协商缓存


下一篇:业务了解—Kheka