• 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如何过期?

  • 相关阅读:
    Android 走向MD的配色风格
    Android热点回顾第六期
    C#集合类:动态数组、队列、栈、哈希表、字典(转)
    Google Chrome默认字体设置(Win)
    C# Socket的粘包处理(转)
    设计模式原则总结--读《大话设计模式》有感 <转>
    C#设计模式学习笔记-单例模式(转)
    C# 编写Windows Service(windows服务程序)
    C# 获取农历日期
    C# 中怎么将string转换成int型
  • 原文地址:https://www.cnblogs.com/vingLiu/p/12891380.html
Copyright © 2020-2023  润新知