【缓存篇】本地缓存之Guava

匿名 (未验证) 提交于 2019-12-02 23:32:01
版权声明:本文为博主原创文章,未经博主允许不得转载。 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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!