除了顺序流外,Java 8中也可以对集合对象调用parallelStream
方法或者对顺序流调用parallel
方法来生成并行流。并行流就是一个把内容分成多个数据块,并用不同的线程分别处理每个数据块的流。这样在使用流处理数据规模较大的集合对象时可以充分的利用多核CPU来提高处理效率。不过在一些情况下,并行流未必会比顺序流快,甚至会慢很多,所以了解如何高效的使用并行流也至关重要。此外,我们也可以调用流的sequential
方法,将并行流转换为顺序流。
【Java8实战】使用流收集数据
在上一节中,我们了解到终端操作collect
方法用于收集流中的元素,并放到不同类型的结果中,比如List
、Set
或者Map
。其实collect
方法可以接受各种Collectors接口的静态方法作为参数来实现更为强大的规约操作,比如查找最大值最小值,汇总,分区和分组等等。
【Java8实战】开始使用流
Java 8 中的 Stream 俗称为流,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。Stream 用于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作。Stream API 借助于Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势。通过下面的例子我们可以初步体会到使用 Stream 处理集合的便利性。
RHEL离线安装Ruby和RubyGems
搭建Redis集群过程中需要安装Ruby环境,这里记录下在RHEL下离线安装Ruby和RubyGems的方法。Ruby的在线下载地址为https://www.ruby-lang.org/en/downloads/,下载好后上传到/usr/loacl
目录下。如果之前已经安装过低版本的Ruby的话可以先使用下面的命令卸载:
1 | sudo yum remove ruby ruby-devel |
Linux下搭建Redis集群
通过Redis的集群,我们可以实现多个Redis节点之间的数据共享,并且支持自动分割数据到不同的节点上。在集群过程中通过主从的分配可以提高Redis的可用性,不会因为某个节点宕掉或者不可达而导致整个集群网络的不可用。Redis 3.0版本后支持使用Redis-Cluster来搭建集群,本文将介绍在Ubuntu 16.04下从零开始搭建Redis集群。因为Redis集群中至少应该有奇数个主节点,所以本文将创建6个Redis节点,其中3个为主节点,3个为从属节点,用于从主节点拉取数据进行备份。
【Java8实战】Lambda表达式(二)
在上一节中,我们为了使用Lambda表达式不得不创建了各种函数描述符的函数式接口,其实Java 8已经给我们提供了一套能够描述常见函数描述符的函数式接口。比如Predicate<T>
、Consumer<T>
、Function<T,R>
、Supplier<T>
等,这些函数式接口位于java.util.function
包。这一节主要记录这些函数式接口的应用。
【Java8实战】Lambda表达式(一)
Java 8的Lambda表达式借鉴了C#和Scala等语言中的类似特性,简化了匿名函数的表达方式。Lambda表达式可以直接以内联的形式为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例。什么是函数式接口?简单来说就是只包含一个抽象方法的接口,允许有默认的实现(使用default关键字描述方法)。函数式接口建议使用@FunctionalInterface
注解标注,虽然这不是必须的,但是这样做更符合规范。
初识Spring Cloud与微服务
在传统的软件架构中,我们通常采用的是单体应用来构建一个系统,一个单体应用糅合了各种业务模块。起初在业务规模不是很大的情况下,对于单体应用的开发维护也相对容易。但随着企业的发展,业务规模与日递增,单体应用变得愈发臃肿。由于单体应用将各种业务模块聚合在一起,并且部署在一个进程内,所以通常我们对其中一个业务模块的修改也必须将整个应用重新打包上线。为了解决单体应用变得庞大脯肿之后产生的难以维护的问题,微服务架构便出现在了大家的视线里。