zoukankan      html  css  js  c++  java
  • 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如何过期?

  • 相关阅读:
    获取AppSettings配置,获取连接字符串
    类在初始化的时候做了什么事
    Easyui Tabs 添加怎么添加。
    Tree数据格式 Easyui
    使用CodeFirst建表的时候要知道的特性
    从数据导出模型到pd设计器
    orm的几种排序写法
    Parallel.ForEach 并行循环的使用
    kendo gird 刷新数据源的几种方式
    表格设置宽度在ie9上无效
  • 原文地址:https://www.cnblogs.com/vingLiu/p/12891380.html
Copyright © 2011-2022 走看看