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;
    }
}