谷歌开源缓存框架Guava Cache

DBC 1.6K 0
添加依赖
     <!--guava依赖包-->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>19.0</version>
        </dependency>
先搞一个工具类——BaseCache
@Component
public class BaseCache {
    private Cache<String,Object> tenMinuteCache = CacheBuilder.newBuilder()
            //设置初始容量
            .initialCapacity(10)
            //最大值
            .maximumSize(100)
            //多少并发
            .concurrencyLevel(5)
            //多少时间后作废——写入后10分钟过期
            .expireAfterWrite(600, TimeUnit.SECONDS)
            //统计缓存命中率
            .recordStats()
            .build();

    public Cache<String, Object> getTenMinuteCache() {
        return tenMinuteCache;
    }

    public void setTenMinuteCache(Cache<String, Object> tenMinuteCache) {
        this.tenMinuteCache = tenMinuteCache;
    }
}
温馨提示

接下来很难 你要细心!!!因为我们是Spring MVC思想 所以可能会有点绕 看不懂也没关系 作者本来就是给自己看的 [呲牙]

先搞一个key 类 方便进行管理
/**
 * 缓存key管理类
 */
public class CacheKeyManager {
    public static String INDEX_BANNER_KEY = "index:kneowledge";
}
弄一个 Controller 给你看
 @Autowired
    KnowledgeService knowledgeService;

    /**
     * 根据类型返回法律知识
     *
     * @return
     */
    @RequestMapping("show_knowledge")
    public HashMap showAllKnowledge(int num) {

        HashMap result = new HashMap<>();

        result.put("result", "success");
        result.put("code", "1");
        result.put("UserList", knowledgeService.list(num));
        return result;


    }
KnowledgeService 类
public interface KnowledgeService {
    List<Knowledge> list(int num);
}
KnowledgeServiceImpl 类
@Service
public class KnowledgeServiceImpl implements KnowledgeService{

    @Autowired
    KnowledgeMapper knowledgeMapper;
    @Autowired
    BaseCache baseCache;
    @Override
    public List<Knowledge> list(int num) {
        KnowledgeExample pe = new KnowledgeExample();

        if (num==1 || num==2  ||num==3 ) {
            pe.createCriteria().andTypeEqualTo(num+"");
        }
        try {
            Object cacheObj = baseCache.getTenMinuteCache().get(CacheKeyManager.INDEX_BANNER_KEY,()->{
                List<Knowledge> knowledges = knowledgeMapper.selectByExample(pe);
                System.out.println("从数据库里面找数据");
                return knowledges;

            });
            if (cacheObj instanceof List){
                List<Knowledge> knowledges = (List<Knowledge>)cacheObj;
                System.out.println("从缓存里面找数据");
                return knowledges;
            }
        }catch (Exception e){
            e.printStackTrace();
        }

        return null;
    }
}
提示

基本实现Guava的本地缓存!

发表评论 取消回复
表情 图片 链接 代码

分享