版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013034640/article/details/90268955
第一,总体导图预览
提醒:点击链接可在线查看
二,Guava是什么
1,是一种本地缓存。对于不变的内容,可以缓存在内存中,下次使用的时候,直接取出,这样可以节省大量的cpu和内存资源,提高系统的吞吐量。
本地缓存作用就是提高系统的运行速度,是一种空间换空间的取舍。实质上是一个key-value的字典。
2.是google开源的公共Java库,类似于Apache Commons,cache只是其中一个模块
3.特点
(1)并发行,支持多线程的并发写入。
(2)过期策略:具有缓存过期的时效,设置缓存时间。
(3)淘汰策略:本地缓存放在内存中,所以需要设置容量上限和淘汰策略来防止出现内存溢出的情况,设置上限一般可以支持缓存对象的数量,或者设置一个具体的内存的大小。但是在Guava中仅仅支持缓存对象的数量。
当缓存的数量超过缓存值的时候,需要按照一定的淘汰策略,淘汰数据。常用的淘汰策略包括:FIFO(先进先出),LRU(最近最少使用),LFU(最不经常使用),这个算法策略跟操作系统的内存策略是一个道理。在guava中默认采用的LRU淘汰算法。
第三,入门demo
1.引入pom引用
<!--引入guava缓存--> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>25.0-jre</version> </dependency>
2.demo测试
/** * @创建人 lzj * @创建时间 2019/5/16 * @描述 */ @RestController @RequestMapping("guava") public class Guava { private static final Logger logger = LoggerFactory.getLogger(Guava.class); Cache<String, String> strCache = CacheBuilder.newBuilder() .maximumSize(100) //最大容量 .expireAfterWrite(1, TimeUnit.MINUTES) //缓存过期时长 .concurrencyLevel(Runtime.getRuntime().availableProcessors())// 设置并发级别为cpu核心数 .build(); @RequestMapping(value = "", method = RequestMethod.GET) public Object getFormat() throws ExecutionException { String key = "testGuava"; String value = "hello Guava"; //1,getIfPresent 方法 String cacheInfo = strCache.getIfPresent(key); //2,获取缓存,当缓存不存在时,则通Callable进行加载并返回。该操作是原子 /* String cacheInfo=strCache.get(key, new Callable<String>() { @Override public String call() throws Exception { return null; } });*/ if (null != cacheInfo) { return cacheInfo; } //put in Guava logger.info("put in Guava"); strCache.put(key, value); HashMap map = new HashMap(); map.put("key", key); map.put("value", value); return map; }
第四,
主要在学习阶段,参考了很多文章,主要链接如下:
使用Guava cache构建本地缓存
Guava学习:Cache缓存入门
Guava Cache系列之一:如何加载缓存
Guava Cache系列之二:如何回收缓存
Guava Cache系列之三:源码分析
guava_缓存
小结
简单了解了下Guava的内容,后面还需要深入理解。
文章来源: https://blog.csdn.net/u013034640/article/details/90268955