GuavaCache 简介

本贴最后更新于 2602 天前,其中的信息可能已经事过境迁

使用介绍

多线程高并发场景中往往是离不开 cache 的,需要根据不同的应用场景来选择不同的 cache,比如分布式缓存redis、memcached,还有本地(进程内)缓存如 ehcache、GuavaCache

  • 简单
  • 强大
  • 轻量级
  • 不需要配置文件
  • 能覆盖绝大多数使用 cache 的场景需求!

适用性

计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存.

Guava Cache 与 ConcurrentMap 很相似,但也不完全一样。最基本的区别是 ConcurrentMap 会一直保存所有添加的元素,直到显式地移除。相对地,Guava Cache 为了限制内存占用,通常都设定为自动回收元素。在某些场景下,尽管 LoadingCache 不回收元素,它也是很有用的,因为它会自动加载缓存。

通常来说,Guava Cache 适用于:

  • 你愿意消耗一些内存空间来提升速度。
  • 你预料到某些键会被查询一次以上。
  • 缓存中存放的数据总量不会超出内存容量。(Guava Cache 是单个应用运行时的本地缓存。它不把数据存放到文件或外部服务器。如果这不符合你的需求,请尝试 Memcached 这类工具)

如果你的场景符合上述的每一条,Guava Cache 就适合你。

示例

   LoadingCache graphs = CacheBuilder.newBuilder()
		  .maximumSize(1000)
		  .expireAfterWrite(10, TimeUnit.MINUTES)
		  .removalListener(MY_LISTENER)
		  .build(
			  new CacheLoader() {
				  public Graph load(Key key) throws AnyException {
					  return createExpensiveGraph(key);
				  }
		  });

Maven 依赖

com.google.guava guava 19.0 ```
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3190 引用 • 8214 回帖 • 1 关注
  • 缓存
    42 引用 • 70 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 我来分析一下你的 ID,你是不是特别崇拜 88250,所以想用 god88250 来做 ID,但是这样好像太露骨了,所以你就打算用 god250 作 Id,但是这样有无法提现出你对 88250 的爱慕之情,所以你就叫 god520 了?

    这样隐晦的表达,在下着实佩服佩服佩服

    2 回复
  • wenandlu

    该吃药了,大郎

  • scorpion

    那他头像跟我一个样是不是也代表了点什么。。。 😢