技术分享
Spring AI 中的 DocumentTransformer 与 RAG 深度解析

Spring AI 架构解析与核心模块实践

Spring AI 架构解析与核心模块实践 在当今数字化转型的浪潮中,人工智能(AI)技术正逐渐成为推动业务创新的关键力量。Spring AI 作为 Spring 生态系统中的一员,为开发者提供了一种简单而高效的方式来集成 AI 功能。作为一名专注于 Java 技术的开发者,我深入研究了 Spring AI 的架构、核心模块以及其实现方式,并在此分享我的学习心得和实践代码。
Spring AI 架构解析与核心模块实践
流程条件表达式技术方案

一个超实用的Java集合处理库——collection-complete

在Java开发中,我们经常需要对集合数据进行各种操作,比如批量获取用户信息、订单信息等。如果处理不当,很容易导致代码冗余、性能低下等问题。今天给大家介绍一个我最近发现的超实用的Java集合处理库——collection-complete。 collection-complete是一个用于处理集合数据并补充相关信息的Java库。它提供了链式调用的功能,可以方便地对集合中的元素进行批量操作和属性补充。这个库的设计理念是简化集合数据的处理流程,让开发者能够更高效地完成业务逻辑的实现。
一个超实用的Java集合处理库——collection-complete

Elasticsearch — 索引(Mapping Index)

在Elasticsearch中Mapping Index是一个核心概念,它定义了索引中数据的结构,包括字段的名称、类型、属性等。用于定义索引中文档及其字段如何被存储和索引的过程。它类似于传统关系型数据库中的表结构定义。在 MySQL 中,表结构里包含了字段名称,字段的类型还有索引信息等。在 Mapping 里也包含了一些属性,比如字段名称、类型、字段使用的分词器、是否评分、是否创建索引等属性。 ‌作用‌: • 定义索引下的字段名(Field Name)。 • 定义字段的类型,如文本型(text)、关键字型(keyword)、数字型(integer、long、float、double等)等。 • 定义字段的索引相关配置,如是否索引、是否记录位置信息等。
Elasticsearch — 索引(Mapping Index)

Elasticsearch — 如何存储数据并保持一致性?

Elasticsearch是一个基于Lucene分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间数据等。它构建于Lucene之上,并提供了一个易于使用的RESTful API来处理数据索引和搜索。Elasticsearch以其强大的全文搜索能力而闻名,并且能够实时地存储、搜索和分析大量数据。此外,Elasticsearch还常常与Logstash(用于收集、解析和处理数据流)和Kibana(用于数据可视化)结合使用,形成了ELK Stack,广泛应用于日志分析、指标分析以及其他大数据应用场景中。 在实际业务场景中我们或许是因为数据库中数量大且需要一个复杂的条件过滤时才考虑到应用Elasticsearch,因为它提供大数据量(PB)近乎实时的搜索功能。
Elasticsearch — 如何存储数据并保持一致性?

Netty — API网关Demo

上一小节我们总结了Reactor模型,Netty基于主从Reactor模型设计了自己的模型结构,使得Netty在不同的场景下都有非常亮眼的性能和可用性表现。进入到这一小节,我又想到了那句话”Talk is cheap, show me code”。虽然上一小节我们简单写了一个“快速开始”,但是这对于要达到快速使用Netty进行网络开发的目的还远远不够。在一小节中我们会通过一系列的Demo示例熟悉Netty的开发,从代码中感受他们的特性。最后我们会通过一个简单的聊天加深我们对Netty各个核心组件的理解。最后我们动手设计实践一个API网关,认识网关的功能和结构,同时也进入提升我们使用Netty进行网络开发的熟练度,同时为后续深入源码打下基础。这一小节代码比较多,不要害怕耐心看完并付诸实践,一定会收获满满。
Netty — API网关Demo

Java异步编程方式介绍

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

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

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

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

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