【缓存篇】本地缓存之Guava

 项目中用到了本地缓存,使用的是google类库的Guawa,本篇主要先了解下。

第一,总体导图预览

【缓存篇】本地缓存之Guava_第1张图片

提醒:点击链接可在线查看

二,Guava是什么

1,是一种本地缓存。对于不变的内容,可以缓存在内存中,下次使用的时候,直接取出,这样可以节省大量的cpu和内存资源,提高系统的吞吐量。

本地缓存作用就是提高系统的运行速度,是一种空间换空间的取舍。实质上是一个key-value的字典。

2.是google开源的公共Java库,类似于Apache Commons,cache只是其中一个模块

3.特点

(1)并发行,支持多线程的并发写入。

(2)过期策略:具有缓存过期的时效,设置缓存时间。

(3)淘汰策略:本地缓存放在内存中,所以需要设置容量上限和淘汰策略来防止出现内存溢出的情况,设置上限一般可以支持缓存对象的数量,或者设置一个具体的内存的大小。但是在Guava中仅仅支持缓存对象的数量。

当缓存的数量超过缓存值的时候,需要按照一定的淘汰策略,淘汰数据。常用的淘汰策略包括:FIFO(先进先出),LRU(最近最少使用),LFU(最不经常使用),这个算法策略跟操作系统的内存策略是一个道理。在guava中默认采用的LRU淘汰算法。

第三,入门demo

1.引入pom引用

 
        
            com.google.guava
            guava
            25.0-jre
      

2.demo测试

/**
 * @创建人 lzj
 * @创建时间 2019/5/16
 * @描述
 */
@RestController
@RequestMapping("guava")
public class Guava {

    private static final Logger logger = LoggerFactory.getLogger(Guava.class);

    Cache 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() {
            @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;
    }

四,redis跟Guava使用哪个好?

项目中同时使用到了redis跟Guava,有点纳闷了,这两个哪个效果更好的,该如何选择?

【缓存篇】本地缓存之Guava_第2张图片

总体来说,还需要根据不同的场景,来选择不同的缓存方案即可。

五,主要在学习阶段,参考了很多文章,主要链接如下:

使用Guava cache构建本地缓存

Guava学习:Cache缓存入门

Guava Cache系列之一:如何加载缓存

Guava Cache系列之二:如何回收缓存

Guava Cache系列之三:源码分析

guava_缓存

使用本地缓存快还是使用redis

小结

简单了解了下Guava的内容,后面还需要深入理解。

你可能感兴趣的:(---------【HTZX,I,love,you】)