guava做本地缓存

来源:互联网 发布:mac软件下载网站排名 编辑:程序博客网 时间:2024/05/26 08:41
package tool;import com.google.common.cache.CacheBuilder;import com.google.common.cache.CacheLoader;import com.google.common.cache.LoadingCache;import java.util.Optional;import java.util.Random;import java.util.concurrent.TimeUnit;public class GuavaTest {    private static Integer generateNewMsgCode(String phone) {        Integer msgCode = (new Random()).nextInt(1000000 - 100000) + 100000;        System.out.println("generate new Msg code. phone=" + phone + ",msgCode=" + msgCode);        return msgCode;    }    private static LoadingCache<String, Optional<Integer>> msgCodeCache =        CacheBuilder.newBuilder()            .maximumSize(1000L)            .expireAfterWrite(5, TimeUnit.SECONDS)//5s过期            .concurrencyLevel(10)            .build(new CacheLoader<String, Optional<Integer>>() {                @Override                public Optional<Integer> load(String phone) throws Exception {                    return Optional.ofNullable(generateNewMsgCode(phone));                }            });    private static Integer getMsgCodeByPhone(String phone){        return msgCodeCache.getUnchecked(phone).orElse(0);    }    public static void main(String[] args) throws InterruptedException {        String phone = "13100000000";        //first        System.out.println("first .msgCode:" + getMsgCodeByPhone(phone));        Thread.sleep(1000);        //second        System.out.println("second .msgCode:" + getMsgCodeByPhone(phone));        Thread.sleep(5000);        //third        System.out.println("third .msgCode:" + getMsgCodeByPhone(phone));    }}
"com.google.guava:guava:$guavaVersion"
原创粉丝点击