Guava 笔记二: cache简介

来源:互联网 发布:数学之美 知乎 编辑:程序博客网 时间:2024/06/01 09:31

Guava 笔记二: cache简介

为什么要用cache

Cache是用来缓存哪些以后需要,并且得到这个值需要花费很多cost的对象。

Cache和ConcurrentMap很相像,最本质的区别是ConcurrentMap是强引用,只能显式的remove,Cache为了提高内存的利用率,可以持有weak value和weak reference。为什么是像是ConcurrentMap呢?因为cache实现了线程安全,多个线程访问同时写的时候,不会造成重复.

JDK cache?

Guava Cache使用场景

  • 需要以内存换取性能.
  • 需要使用多次缓存的值.
  • 缓存不超过系统的RAM。Guava只使用内存,不会使用文件或者其他的。如果你需要缓存到到服务器的其他地方,考虑一下Memcached.

怎么使用Cache

创建guava cache
  1. 从CacheLoader进行创建

    LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()   .maximumSize(1000)   .build(       new CacheLoader<Key, Graph>() {         public Graph load(Key key) throws AnyException {           return createExpensiveGraph(key);         }       });...try { return graphs.get(key);} catch (ExecutionException e) { throw new OtherException(e.getCause());}
  2. From a Callable

    Cache<Key, Value> cache = CacheBuilder.newBuilder()
    .maximumSize(1000)
    .build(); // look Ma, no CacheLoader
    ...
    try {
    // If the key wasn't in the "easy to compute" group, we need to
    // do things the hard way.
    cache.get(key, new Callable<Value>() {
    @Override
    public Value call() throws AnyException {
    return doThingsTheHardWay(key);
    }
    });
    } catch (ExecutionException e) {
    throw new OtherException(e.getCause());
    }

  1. get操作
    如果存在就get出来,否则就会新建一个key放到cache里
  2. Insert操作
    插入直接调用put操作就好
  3. Eviction
    1. 根据size进行限定
      CacheBuilder.maximumSize(long)
    2. 根据时间进行限定
      • expireAfterAccess(long, TimeUnit)
      • expireAfterWrite(long, TimeUnit)

其他特性:
1. 可以使用弱引用
* CacheBuilder.weakKeys()
* CacheBuilder.weakValues()
* CacheBuilder.softValues()
2. 手动移除(失效的)
通过调用方法
* 移除一个Cache.invalidate(key)
* 移除多个Cache.invalidateAll(keys)
* 移除全部Cache.invalidateAll()
3. Removal Listener 可以实现在key被移除的时候,做一些什么东西。
4. Statistics 可以通过CacheBuilder.recordStats()可以收集cache的统计资料。可以提供类似一下内容和更多内容:
* hitRate()
* averageLoadPenalty()
* evictionCount()
5. asMap返回一个ConcurrentMap的对象

Summary:
guava cache是一个类似提供cache的功能,但是是不太完备的功能,可能我们用的最多还是Ecache. 这里只是了解guava cache是什么,有什么作用.所以只能算简介.


  1. guava官方wiki
  2. 关于guava很好的理解
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 儿子总是不写作业怎么办 长鸡眼脚背肿了怎么办 脚上反复长鸡眼怎么办 脚底长鸡眼很痒怎么办 小脚趾上长鸡眼怎么办 6岁宝宝不爱学习怎么办 上班站久了腿肿怎么办 站时间长了腿肿怎么办 孩子做作业老是粗心大意怎么办 高中孩子没学习兴趣怎么办 初三孩子失去学习兴趣怎么办 初二对学习兴趣不大怎么办 脸上痒发红发肿怎么办 孩子作业拖拉爱丢三落四怎么办 腿肌肉按摩肿了怎么办 孩子上一年级成绩差怎么办 小孩脖子拧筋了怎么办 小孩塑料玩具拧不出来怎么办 一年级孩子做数学题粗心怎么办 手和脚有点肿怎么办 手破了之后肿了怎么办 手指肿了有脓怎么办 宝宝手指红肿有脓怎么办 孩子一听做作业就烦气怎么办 虎皮鹦鹉脚瘸了怎么办 虎皮鹦鹉脚受伤了怎么办 虎皮鹦鹉脚流血了怎么办 虎皮鹦鹉被风扇打到脚怎么办 虎皮鹦鹉脚脱臼了怎么办 孩子作业做得慢怎么办 员工给公司造成损失怎么办 小孩有写不完的作业家长怎么办 一年级孩子作业太粗心怎么办 孩子最近不好好做作业怎么办 工作压力大害怕做不好怎么办 孩子的数算不对怎么办? 孩子计算老是出错怎么办呢 孩子经常计算错误能怎么办 孩子老出现计算错误怎么办 孩子做作业马虎该怎么办 黑笔写错了纸破了怎么办