我是靠谱客的博主 勤劳秀发,最近开发中收集的这篇文章主要介绍19、LoadingCache1、介绍2、代码demo,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1、介绍

LoadingCache是Google guava包下的本地缓存功能 com.google.common.cache。

原理类似于hashmap,如果缓存中没有对应的结果,则调用load方法去请求加载

特别是缓存一些MySQL中不怎么修改的参数信息,可以大大减少查询次数

注意:load方法返回的结果不能为null,否则会报错,可以使用Optional来封装结果

2、代码demo

  • 1、maven依赖

    
    <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
    <dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>22.0</version>
    </dependency>
    
  • 2、代码示例

    
    package com.surfilter.mass;
    import com.google.common.cache.*;
    import java.util.Optional;
    import java.util.concurrent.TimeUnit;
    /**
    * [@Author](https://my.oschina.net/arthor) liufu
    * @CreateTime 2018/4/9
    18:17
    */
    public class LoadingCacheTest {
    public static void main(String[] args) {
    LoadingCache<String, Optional<String>> cache = CacheBuilder.newBuilder()
    //设置并发级别为8,并发级别是指可以同时写缓存的线程数
    .concurrencyLevel(8)
    //设置写缓存后8秒钟过期
    .expireAfterWrite(8, TimeUnit.SECONDS)
    //设置缓存容器的初始容量为10
    .initialCapacity(10)
    //设置缓存最大容量为100,超过100之后就会按照LRU最近虽少使用算法来移除缓存项
    .maximumSize(100)
    //设置要统计缓存的命中率
    .recordStats()
    //设置缓存的移除通知
    .removalListener(new RemovalListener<Object, Object>() {
    [@Override](https://my.oschina.net/u/1162528)
    public void onRemoval(RemovalNotification<Object, Object> notification) {
    System.out.println(notification.getKey() + " was removed, cause is " + notification.getCause());
    }
    })
    //build方法中可以指定CacheLoader,在缓存不存在时通过CacheLoader的实现自动加载缓存
    .build(new CacheLoader<String, Optional<String>>() {
    [@Override](https://my.oschina.net/u/1162528)
    public Optional<String> load(String key) throws Exception {
    return Optional.ofNullable(loadRealData(key));
    }
    }
    );
    //报空指针异常,不能传入null
    //Optional<String> optional = cache.getUnchecked(null);
    System.out.println(cache.getUnchecked("liufu").orElse("默认值"));
    System.out.println(cache.getUnchecked("aaliuf").orElse("默认值"));
    //debug发现,这一行没有进入下面的loadRealData方法
    System.out.println(cache.getUnchecked("aaliuf").orElse("默认值"));
    }
    public static String loadRealData(String key){
    if (key.startsWith("aa")){
    return key;
    }
    return null;
    }
    }
    

转载于:https://my.oschina.net/liufukin/blog/2222474

最后

以上就是勤劳秀发为你收集整理的19、LoadingCache1、介绍2、代码demo的全部内容,希望文章能够帮你解决19、LoadingCache1、介绍2、代码demo所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(117)

评论列表共有 0 条评论

立即
投稿
返回
顶部