Google Guava
文章平均质量分 91
weixin_42073629
这个作者很懒,什么都没留下…
展开
-
Redis+Caffeine 两级缓存
在高性能的服务架构设计中,缓存是一个不可或缺的环节。在实际的项目中,我们通常会将一些热点数据存储到Redis或MemCache这类缓存中间件中,只有当缓存的访问没有命中时再查询数据库。在提升访问速度的同时,也能降低数据库的压力。随着不断的发展,这一架构也产生了改进,在一些场景下可能单纯使用Redis类的远程缓存已经不够了,还需要进一步配合本地缓存使用,例如 Guava cache 或 Caffeine,从而再次提升程序的响应速度与服务性能。于是,就产生了使用本地缓存作为一级缓存,再加上远程缓存作...转载 2022-04-10 15:16:32 · 381 阅读 · 0 评论 -
缓存之王Caffeine Cache
在项目开发中,为提升系统性能,减少 IO 开销,本地缓存是必不可少的。我们最常见的本地缓存是 Guava 和 Caffeine,本篇文章将为大家介绍 Caffeine。Caffeine 是基于 Google Guava Cache 设计经验改进的结果,相较于 Guava 在性能和命中率上更具有效率,你可以认为其是 Guava Plus。毋庸置疑的,你应该尽快将你的本地缓存从 Guava 迁移至 Caffeine,本文将重点和 Guava 对比二者性能占据,给出本地缓存的最佳实践,以及迁移策略。二原创 2021-04-02 19:57:33 · 295 阅读 · 0 评论 -
Guava 心得:Guava 新增集合类型 —— Multimap
在日常的开发工作中,我们有的时候需要构造像Map<K, List<V>>或者Map<K, Set<V>>这样比较复杂的集合类型的数据结构,以便做相应的业务逻辑处理。例如:import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.junit.Test;public class Multimap原创 2020-06-08 00:00:41 · 179 阅读 · 0 评论 -
Guava 心得:Preconditions 优雅的检验参数
在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按照正常流程执行下去。对于可预知的一些数据上的错误,我们一定要做事前检测和判断,来避免程序流程出错,而不是完全通过错误处理来保证流程正确执行,毕竟错误处理是比较消耗资源的方式。在平常情况下我们对参数的判断都需要自己来逐个写方法判断,代码量不少并且复用性不高,如下所示:import org.junit.Test;public class PreconditionsTest { @Test public原创 2020-06-08 00:00:29 · 197 阅读 · 0 评论 -
Guava 心得:Guava 新集合 —— Table 等
Table当我们需要多个索引的数据结构的时候,通常情况下,我们只能用这种丑陋的Map<FirstName, Map<LastName, Person>>来实现。为此Guava提供了一个新的集合类型-Table集合类型,来支持这种数据结构的使用场景。Table支持“row”和“column”,而且提供多种视图。@Test public void TableTest(){ Table<String, Integer, String> aTab原创 2020-06-07 17:32:43 · 345 阅读 · 0 评论 -
Guava 心得:Guava Cache
缓存,在我们日常开发中是必不可少的一种解决性能问题的方法。简单的说,cache 就是为了提升系统性能而开辟的一块内存空间。缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用。在日常开发的很多场合,由于受限于硬盘IO的性能或者我们自身业务系统的数据处理和获取可能非常费时,当我们发现我们的系统这个数据请求量很大的时候,频繁的IO和频繁的逻辑处理会导致硬盘和CPU资源的瓶颈出现。缓存的作用就是将这些来自不易的数据保存在内存中,当有其他线程或者客户端需要查询相同的数据资源时,直接从缓存原创 2020-06-07 17:29:12 · 316 阅读 · 0 评论 -
Guava 心得:简化异常处理的 Throwables 类
有时候, 当我们我们捕获异常, 并且像把这个异常传递到下一个try/catch块中。Guava提供了一个异常处理工具类, 可以简单地捕获和重新抛出多个异常。例如:import java.io.IOException;import org.junit.Test;import com.google.common.base.Throwables;public class ThrowablesTest { @Test public void testThrowables(){原创 2020-06-07 17:25:19 · 412 阅读 · 0 评论 -
Guava 心得:Immutable(不可变)集合
不可变集合,顾名思义就是说集合是不可被修改的。集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变。为什么要用immutable对象?immutable对象有以下的优点:对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象 线程安全的:immutable对象在多线程下安全,没有竞态条件 不需要支持可变性, 可以尽量节省空间和时间的开销. 所有的不可变集合实现都比可变集合更加有效的利用内存 (analysis) 可以被使用为一个常量,并且期望在未来也是保持不变原创 2020-06-07 17:22:12 · 223 阅读 · 0 评论 -
Guava 心得:Guava 新增集合类型 —— Multiset
Guava引进了JDK里没有的,但是非常有用的一些新的集合类型。所有这些新集合类型都能和JDK里的集合平滑集成。Guava集合非常精准地实现了JDK定义的接口。Guava中定义的新集合有:Multiset SortedMultiset Multimap ListMultimap SetMultimap BiMap ClassToInstanceMap TableMultiset 集合Multiset是什么?顾名思义,Multiset和Set的区别就是可以保存多个相同的对象。在JDK中原创 2020-06-07 17:14:58 · 296 阅读 · 0 评论 -
Guava 心得:Range
在Guava中新增了一个新的类型Range,从名字就可以了解到,这个是和区间有关的数据结构。从Google官方文档可以得到定义:Range定义了连续跨度的范围边界,这个连续跨度是一个可以比较的类型(Comparable type)。比如1到100之间的整型数据。在数学里面的范围是有边界和无边界之分的;同样,在Guava中也有这个说法。如果这个范围是有边界的,那么这个范围又可以分为包括开集(不包括端点)和闭集(包括端点);如果是无解的可以用+∞表示。如果枚举的话,一共有九种范围表示:概念 表示范原创 2020-06-07 17:12:20 · 149 阅读 · 0 评论 -
Guava 心得:Google Guava 类库简介
Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你的JAVa代码更加优雅,更加简洁,让你工作更加轻松愉悦。下面我们就开启优雅Java编程学习之旅!1. 项目相关信息官方首页:http://code.google.co原创 2020-06-07 17:07:46 · 193 阅读 · 0 评论 -
Guava 心得:复写的 Object 常用方法
在Java中Object类是所有类的父类,其中有几个需要override的方法比如equals,hashCode和toString等方法。每次写这几个方法都要做很多重复性的判断, 很多类库提供了覆写这几个方法的工具类, Guava也提供了类似的方式。下面我们来看看Guava中这几个方法简单使用。equals方法:equals是一个经常需要覆写的方法, 可以查看Object的equals方法注释, 对equals有几个性质的要求:自反性reflexive:任何非空引用x,x.equals(x)返回原创 2020-06-07 17:06:25 · 134 阅读 · 0 评论 -
Guava 心得:Guava 新增集合类型 —— Bimap
BiMap提供了一种新的集合类型,它提供了key和value的双向关联的数据结构。通常情况下,我们在使用Java的Map时,往往是通过key来查找value的,但是如果出现下面一种场景的情况,我们就需要额外编写一些代码了。首先来看下面一种表示标识序号和文件名的map结构。@Testpublic void logMapTest(){ Map<Integer,String> logfileMap = Maps.newHashMap(); logfileMap.put(1,原创 2020-06-07 16:57:26 · 131 阅读 · 0 评论 -
Guava 心得:Optional 优雅的使用null
在我们学习和使用Guava的Optional之前,我们需要来了解一下Java中null。因为,只有我们深入的了解了null的相关知识,我们才能更加深入体会领悟到Guava的Optional设计和使用上的优雅和简单。null 代表不确定的对象Java中,null是一个关键字,用来标识一个不确定的对象。因此可以将null赋给引用类型变量,但不可以将null赋给基本类型变量。Java中,变量的使用都遵循一个原则:先定义,并且初始化后,才可以使用。例如如下代码中,我们不能定义int age后,不给age原创 2020-06-07 16:48:31 · 291 阅读 · 0 评论 -
Guava 心的:EventBus
EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。Observer模式是比较常用的设计模式之一,虽然有时候在具体代码里,它不一定叫这个名字,比如改头换面叫个Listener,但模式就是这个模式。手工实现一个Observer也不是多复杂的一件事,只是因为这个设计模式实在太常用了,Java就把它放到了JDK里面:Observable和Observ原创 2020-06-06 20:22:35 · 96 阅读 · 0 评论 -
Google Guava 编程
前言 阿里巴巴出了一本Java规范,在国内java开发眼里被赋予了神圣的殿堂,我不推荐你用阿里巴巴的开发手册。目前Google Guava在实际应用中非常广泛,本篇博客将以博主对 Guava 使用的认识以及在项目中的经验来给大家分享!学习使用 Google Guava可以让你快乐编程,写出优雅的 Java 代码,在业务允许的条件下,我推荐使用 Guava编程!Google 出品 Java 编码规范,科学又权威,强烈推荐!正文 Joiner/Splitter/CharMatcher...原创 2020-06-06 19:26:57 · 193 阅读 · 0 评论