技术分享

Java异步编程方式介绍

异步执行对于开发者来说并不陌生,在实际的开发过程中,很多场景多会使用到异步,相比同步执行,异步可以大大缩短请求链路耗时时间,比如:发送短信、邮件、异步更新等,这些都是典型的可以通过异步实现的场景。1. 线程Thread 2. Future 3. 异步框架CompletableFuture 4. Spring注解@Async 5. Spring ApplicationEvent事件 6. 消息队列 7. 第三方异步框架,比如Hutool的ThreadUtil 8. Guava异步

Spring Boot 实现多租户架构:支持应用多租户部署和管理

常见的技术选择包括: • 数据库级多租户:使用多个数据库实例分别存储各个租户的数据,每个租户对应一个独立的数据库。 • 模式级多租户:使用同一个数据库实例,但是为每个租户创建独立的数据库模式,实现数据隔离。 • 表级多租户:在同一个数据库模式下,使用不同的表来存储各个租户的数据,实现数据隔离。 • 应用级多租户:在应用程序中实现租户隔离,例如使用Spring Cloud等微服务框架。 • 容器级多租户:使用容器技术,为每个租户创建独立的容器,实现资源隔离和控制。 4 实现多租户架构的注意事项 • 保证租户数据的隔离性和安全性。 • 设计合理的租户数据结构和关系模型。 • 统一管理租户的配置和权限。 • 保证系统的可扩展性和可伸缩性,支持水平扩展。 • 保证系统的高可用性和容错性,避免单点故障。 • 对租户数据进行备份和恢复,保证数据的可靠性和完整性

Redis 热key是什么问题,如何导致的?有什么解决方案?

做一些C端业务,不可避免的要引入一级缓存来代替数据库的压力并且减少业务响应时间,其实每次引入一个中间件来解决问题的同时,必然会带来很多新的问题需要注意,比如缓存一致性问题。 那么其实还会有一些其他问题比如使用Redis作为一级缓存时可能带来的热key、大key等问题,本文我们就热key(hot key)问题来讨论,如何合理的解决热key问题。

™️HttpClient? RestTemplate?WebClient? 不~是 RestClient

Spring 框架一直提供了两种不同的客户端来执行 http 请求: • RestTemplate: 它在 Spring 3 中被引入,提供同步的阻塞式通信。 • WebClient: 它在 Spring 5 的 Spring WebFlux 库中作为一部分被发布。它提供了流式 API,遵循响应式模型。 RestTemplate 的方法暴露了太多的 HTTP 特性,导致了大量重载的方法,使用成本较高。WebClient 是 RestTemplate 的替代品,支持同步和异步调用。它是 Spring Web Reactive 项目的一部分。 现在 Spring 6.1 M1 版本引入了 RestClient。一个新的同步 http 客户端,其工作方式与 WebClient 类似,使用与 RestTemplate 相同的基础设施。

Hutool 5.8.8 BeanUtil.copyProperties 致命异常

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。 JavaBean是一个拥有对属性进行set和get方法的类。它可以被简单地定义为包含setXXX和getXXX方法的对象。在Hutool中,判定Bean的方法为:是否存在只有一个参数的setXXX方法。Bean工具类主要操作setXXX和getXXX方法,如将Bean对象转为Map等。

使用 Keycloak REST API 进行身份验证和授权

Keycloak REST API 可以被用来进行身份验证和授权。使用该API,开发人员可以轻松地在其应用程序中实现安全性验证和授权功能,同时使用Keycloak的内置功能进行管理和配置。Keycloak的REST API还提供了许多不同的终端点来进行用户和角色管理、认证事件和SAML元数据的访问等。 作为一个基于开源的身份和访问管理解决方案,Keycloak的REST API对于任何需要对应用程序进行认证和授权的开发人员都非常有帮助。

API网关之Gateway

API 网关是一个服务器,是系统对外的唯一入口。API 网关封装了系统内部架构,为每个客户端提供定制的 API。所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有非业务功能。API 网关并不是微服务场景中必须的组件,如下图,不管有没有 API 网关,后端微服务都可以通过 API 很好地支持客户端的访问

🗒️Redis 入手知识点

Redis是一种高性能的key-value存储系统,具有以下几个特点: 1. 内存存储:Redis将数据存储在内存中,因此读写速度非常快,通常比基于磁盘的存储系统快几个数量级。 2. 数据结构多样:Redis支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等,丰富的数据结构使Redis可以支持更多的应用场景。 3. 持久化:Redis支持将数据持久化到磁盘上,以保证数据的可靠性。 4. 高并发性:Redis采用单线程模型,减少了多线程之间的竞争,从而使得Redis具有更高的并发性。 5. 分布式:Redis提供了集群模式,可以将数据分布到不同的节点上,从而实现水平扩展。