Guava中的Cache简易源码分析

本文是用guava 18.0,本文讨论com.google.common.cache下的Cache

1、是什么?有什么用?

Cache是guava提供的一个工具缓存类。我们可以利用他缓存一些信息到本机的内存中。在框架,组件中会经常用到这个功能。例如,缓存一些用户信息

2、怎样用?

         /**
         * 如何将数据过期?(奇怪的想法,用定时器去删除内存的数据。)
         * 在用户调用get方法的时候,去判断该key是否过期,如果过期就将value进行删除。
         */
        Cache<Object, Object> localCache = CacheBuilder.newBuilder()
                .maximumSize(1000) // 设置缓存的最大容量
                .expireAfterWrite(1, TimeUnit.MINUTES)
                .build();
        localCache.put("testkey","testValue");
        
        System.out.println(localCache.getIfPresent("testkey"));
        
        System.out.println(localCache.get("1", new Callable<Object>() {
            @Override
            public Object call() throws Exception {
                return "666";
            }
        }));

运行结果为:
testValue
666

3、简易源码分析

3.1、如何保存?

com.google.common.cache.LocalCache.LocalManualCache#put
---》com.google.common.cache.LocalCache#put
----》com.google.common.base.Equivalence.Equals#doHash # 拿key.hashCode() 值
------》com.google.common.cache.LocalCache#rehash # 对刚刚拿到的key hashcode进行rehash,为什么要这么干?应该是为了将key弄的更加分散些
-------》com.google.common.cache.LocalCache#segmentFor # 用刚刚得到的hash值,作为segments对象数组的索引(下标),找到对应的segment对象
--------》com.google.common.cache.LocalCache.Segment#put

3.2、如何读取?

3.3、key如何过期?

posted @ 2020-05-14 21:03  邂逅那青春-VING  阅读(416)  评论(0编辑  收藏  举报