Java8 CompletableFuture异步编程 CompletableFuture是Java 8引入的一个强大的异步编程工具,它实现了Future和CompletionStage接口,提供了丰富的API来简化异步操作。与传统的Future相比,CompletableFuture支持非阻塞的回调机制,允许通过观察者模式在计算结果完成时立即通知监听者,避免了轮询或阻塞主线程的问题。该类提供了一系列方法用于创建异步任务(如runAsync、supplyAsync)、处理任务完成后的结果(如whenComplete、handle)、以及组合多个异步任务(如thenCombine、applyToEither)。此外,CompletableFuture还支持多任务组合操作(如allOf等待所有任务完成, anyOf只要有一个任务完成),使得复杂的异步流程控制变得更加简单直观。示例代码展示了如何使用这些方法进行异步任务的创建、结果处理及任务间的协调。 2021-07-11 1018 0 java 总结 java8 多线程
Java多线程实现的四种方式 本文介绍了Java中四种实现多线程的方法:1)继承Thread类并重写run方法;2)实现Runnable接口,通过其实例对象作为Thread构造函数的参数;3)使用Callable与FutureTask结合创建线程,这种方式支持获取执行结果;4)利用线程池创建线程,此法能有效管理资源,保持性能稳定。每种方式都附有示例代码说明其实现细节。其中,前两种方式不支持直接从线程中获取返回值,而Callable和FutureTask则提供了这一功能。最后强调了线程池在资源管理和性能优化方面的优势。 2021-07-08 991 0 java 总结 多线程
SpringCache Spring从3.1版本开始引入了`Cache`和`CacheManager`接口来统一不同缓存技术,并支持JCache(JSR-107)注解以简化开发。`Cache`接口的实现包括`RedisCache`、`EhCacheCache`等。每次调用需要缓存的方法时,Spring会检查该方法是否已执行过,若存在结果则直接返回缓存中的数据;否则执行方法并将结果缓存后返回。 使用步骤如下: 1. 添加依赖:`spring-boot-starter-cache`。 2. 在配置文件中指定缓存类型(如Redis)及过期时间。 3. 编写配置类设置缓存序列化方式及其他属性。 4. 通过`@EnableCaching`启用缓存功能。 Spring Cache提供了多个注解如`@Cacheable`用于定义缓存、`@CachePut`更新缓存、`@CacheEvict`清除缓存等。此外,`@Caching`可以组合多种缓存操作。对于缓存问题,如穿透、击穿和雪崩,Spring提供了相应解决方案,例如缓存空值、加锁以及随机过期时间策略。针对读多写少且一致性要求不高的场景,Spring Cache是一个很好的选择。 2021-07-03 1891 0 java 总结 锁 springboot 分布式 微服务
分布式锁Redisson Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, B 2021-07-02 1956 0 java 总结 锁 redis 分布式 微服务
本地缓存与分布式缓存 缓存在服务端编程当中,缓存主要是指将数据库的数据加载到内存中,之后对该数据的访问都在内存中完成,从而减少了对数据库的访问,解决了高并发场景中数据库容易成为性能瓶颈的问题;以及基于内存的访问速度高于磁盘的访问速度的原理(数据库读取数据一般需要从磁盘读取),提高了数据的访问速度和程序性能。本地缓存本地缓 2021-07-01 1193 0 java 总结 redis 分布式 微服务
lettuce堆外内存溢出bug 在进行压力测试时,可能会遇到堆外内存溢出(OutOfDirectMemoryError)的问题。这主要是由于Spring Boot 2.0之后默认使用的Redis客户端lettuce存在bug,导致Netty在处理网络通信时出现堆外内存溢出。Netty如果没有明确指定堆外内存大小,默认会使用Xms的值,可以通过设置-Dio.netty.maxDirectMemory来调整,但这不是根本解决办法。为了解决这一问题,建议升级Spring Boot版本或切换到使用Jedis作为Redis客户端。如果选择后者,需要在项目的依赖中排除lettuce-core,并添加jedis依赖。 2021-06-30 2134 0 java 问题 redis 分布式
Elasticsearch:springboot整合high-level-client及使用 本文介绍了如何在SpringBoot项目中整合Elasticsearch的high-level REST客户端。首先,需要在`pom.xml`文件中添加与Elasticsearch版本相匹配的依赖,并通过配置属性指定版本。接着,创建一个配置类`GuliESConfig`来初始化`RestHighLevelClient`实例。文章还提供了两个示例:一个是使用`IndexRequest`保存数据到Elasticsearch,另一个是通过`SearchRequest`和DSL查询语言从Elasticsearch检索数据并执行聚合分析。这些操作展示了如何设置索引请求、构建查询条件以及处理返回的结果。 2021-06-26 1273 0 java 总结 Elasticsearch