我是靠谱客的博主 花痴蜜粉,最近开发中收集的这篇文章主要介绍cache缓存的使用计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存
package com.google.guava;
import com.alibaba.fastjson.JSONObject;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import java.util.concurrent.TimeUnit;
/**
* @author : ♞Demons♛
* @date : 2020-01-03 20:47
* Description :计算或检索一个值的代价很高,
* 并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存
**/
public class TestGuavaCacheBuilder {
private static LoadingCache<String, String> cache = CacheBuilder.newBuilder()
// 设置缓存的容量
.maximumSize(100)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build(new CacheLoader<String, String>() {
@Override
public String load(String appId) {
// 若缓存中无需要的数据,会执行以下方法
return queryUserInfoById(appId);
}
});
public static void main(String[] args) throws Exception {
// 首次查询缓存
System.out.println(cache.get("1"));
Thread.sleep(1000L);
// 再次查询缓存
System.out.println(cache.get("1"));
}
private static String queryUserInfoById(String appId) {
System.out.println("get user info from this method");
JSONObject userInfo = new JSONObject();
userInfo.put("1", "admin");
userInfo.put("2", "test");
return userInfo.getString(appId);
}
}
运行结果:
get user info from this method
admin
admin
Process finished with exit code 0
可以看到程序在第一次通过appId获取userInfo时调用了方法,第二次获取时并未调用方法,而是走的缓存
- 三种基于时间的清理或刷新缓存数据的方式:
expireAfterAccess:当缓存项在指定的时间段内没有被读或写就会被回收
expireAfterWrite:当缓存项在指定的时间段内没有更新就会被回收
refreshAfterWrite:当缓存项上一次更新操作之后的多久会被刷新
- 之前常用集合来做缓存,那它们有什么区别呢?
Guava Cache与集合很相似,但也不完全一样;最基本的区别是集合会一直保存所有添加的元素,直到显式地移除.相对地,Guava Cache为了限制内存占用,通常都设定为自动回收元素,可设置过期时间.在某些场景下,尽管LoadingCache 不回收元素,它也是很有用的,因为它会自动加载缓存.
最后
以上就是花痴蜜粉为你收集整理的cache缓存的使用计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存的全部内容,希望文章能够帮你解决cache缓存的使用计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复