自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 对于接口调用方式,可以使用两种不同的技术:Web Service 和 Dubbo。下面我将简要解释它们以及如何在 Maven 项目中集成它们。

**特点**:Maven 使用 XML 格式的配置文件(`pom.xml`)来管理项目的依赖和构建过程,提供了一套标准化的项目结构和构建生命周期。- **特点**:Dubbo 提供了一种简单的服务调用方式,支持多种协议(如 Dubbo 协议、HTTP、RMI 等),并且具有服务注册与发现、负载均衡、容错处理等分布式系统所需的功能。- **定义**:Web Service 是一种基于标准化协议和格式进行通信的技术,允许不同平台上的应用程序通过网络进行通信和交互。

2024-07-25 18:16:17 379

原创 调用@WebService接口时,应该将他如何注入到类里

如果你使用Spring框架,可以利用Spring的依赖注入功能将Web服务注入到你的类中。要做到这一点,可以使用Spring的`@Bean`注解来配置Web服务客户端,并使用`@Autowired`注解进行注入。在Java中,使用`@WebService`注解时,我们常常需要通过依赖注入的方式将Web服务客户端注入到我们的类中。- 如果你在使用Java EE环境下的EJB,可以使用`@WebServiceRef`注解。2. 然后,在你的类中使用`@WebServiceRef`注解来注入Web服务。

2024-07-25 18:14:49 362

原创 调用一个第三方api,但是它返回是异步回调的,如何把这个异步回调做成同步

创建一个适配器类,实现同步接口,在适配器类中调用异步回调接口,并使用线程间通信或锁机制来等待异步结果完成,然后返回结果给调用方。在接收到异步回调时,将结果与对应的请求ID进行匹配,如果匹配成功,则返回结果给调用方。当调用第三方API时,异步回调意味着你发送请求后,第三方平台不会立即返回结果给你,而是在后续的某个时间点通过回调的方式将结果返回给你。3. 使用阻塞队列:可以创建一个阻塞队列,将异步回调的结果放入队列中,在调用方需要结果时,可以使用阻塞队列的take()方法来阻塞等待结果的到来。

2024-01-23 14:58:07 979

原创 自定义实现一个线程安全的arrylist,使用设计模式

这样,通过代理模式,我们实现了一个线程安全的ArrayList,可以在多线程环境中安全地使用。代理类在调用目标对象的方法之前添加了synchronized关键字,确保了线程安全性。要自定义实现一个线程安全的ArrayList,可以使用设计模式中的代理模式。代理模式可以通过创建一个代理类来控制对原始对象的访问,并在访问时添加额外的功能或限制。

2024-01-23 14:55:16 836

原创 jwt中的签名算法

接收方使用对应的公钥对数据和数字摘要进行验证,从而确认数据的完整性和真实性。在实际应用中,签名和加密通常结合使用,以确保数据的完整性、真实性和机密性。例如,在使用JWT时,通常会使用签名来验证令牌的来源和完整性,同时也可以使用加密来保护令牌中的敏感信息。需要注意的是,在使用JWT时,除了签名算法,还需要注意密钥的安全性、令牌的有效期限等因素,以确保JWT的安全性和可靠性。- 签名用于验证数据的完整性和真实性,确认数据的来源,防止数据被篡改。签名和加密是两种不同的机制,用于确保数据的完整性、真实性和保密性。

2023-12-27 14:43:38 1111

原创 创建重试机制

当操作失败时,我们捕获异常并输出错误信息,然后等待一段时间后再次重试,直到达到最大重试次数或操作成功为止。当然,这只是一个简单的示例,实际的重试机制可能需要更复杂的逻辑和策略,例如退避策略(例如指数退避、随机化退避等)、重试条件(例如超时、网络中断等)等。在重试的过程中,如果达到了重试次数的上限或者已经超过了超时时间,那么我们就需要停止重试并抛出异常,以避免对系统产生更大的影响。另外,我们还可以采用一些退避策略,例如指数退避、随机化退避等,以避免在重试的过程中对系统产生太大的负载。// 需要重试的操作。

2023-12-27 14:41:53 406

原创 因为网络抖动,数据拉取中断,进行断点续传

断点续传是一种通过在文件传输过程中记录并保存传输断点的方式,以便在传输中断后能够从中断处重新开始传输,而不需要重新开始整个传输过程。3. P2P 技术:使用点对点(P2P)传输技术时,可以通过记录已经传输的文件块信息,以及与其他节点的协商,实现断点续传。选择合适的断点续传技术取决于具体的应用场景和需求,但总的来说,以上这些技术都可以帮助解决因网络抖动导致数据拉取中断的问题。2. FTP 断点续传:FTP 协议本身就支持断点续传功能,可以在客户端和服务器端协商传输的起始位置,从而实现断点续传。

2023-12-27 11:59:35 491

原创 直接将第三方数据插入到 Redis 中

你可以通过编程语言的 Redis 客户端库(如 Jedis、Lettuce)来连接 Redis 服务器,并使用相应的命令将数据插入到 Redis 中。在上述示例中,我们首先使用 Jedis 客户端库连接到本地 Redis 服务器,然后使用不同的命令将数据插入到 Redis 中。虽然常见的使用场景是将数据从关系型数据库(如MySQL)同步到 Redis 中进行缓存,但也可以直接将第三方数据插入到 Redis 中。这可能涉及到数据转换、数据筛选和数据验证等过程,以确保插入到 Redis 的数据符合预期。

2023-12-22 16:08:57 538

原创 微服务的调用使用

这些微服务都注册到服务注册中心(如Consul或Eureka)中,然后服务代理(如Zuul或Nginx)可以通过服务注册中心发现微服务的地址,并将客户端请求转发到相应的微服务。用户服务调用视频服务的方法,并传递用户ID作为参数,视频服务接收到请求后查询数据库,统计用户上传视频的数量,并将结果返回给用户服务。这是一种常见的、简单的方式,适用于大多数场景。4. **服务代理:** 有时候,微服务之间的调用可能需要通过服务代理进行中间转发。3. **服务代理:** 微服务之间的调用可以通过服务代理来实现。

2023-12-22 14:55:03 1690

原创 测试中调用别人的服务,单元测试写法

最后,我们调用被测试的方法 `getDataFromExternalService()`,并使用断言方法 `assertEquals()` 来验证预期结果与实际结果是否相等。需要注意的是,这只是Java单元测试中调用外部服务的一种常见写法,具体的写法可能会根据具体的情况和使用的框架有所不同。使用合适的单元测试框架和模拟框架,根据具体的需求编写测试用例,并遵循良好的单元测试原则,可以提高测试的可靠性和可维护性。通过使用模拟框架,我们可以模拟外部服务的行为和返回值,从而隔离和控制对这些外部服务的依赖。

2023-12-18 20:49:37 931

原创 LinkedList 在多线程下如何使用

例如,可以在每个对`LinkedList`的读写操作前后使用`synchronized`块来进行同步。3. **使用锁机制(Locking)**:可以使用`java.util.concurrent.locks`包中的锁机制,如`ReentrantLock`,来保护`LinkedList`对象。在多线程环境下,`LinkedList`本身并不是线程安全的,这意味着如果多个线程同时对同一个`LinkedList`对象进行读写操作,可能会导致数据不一致或其他并发问题。// 在锁保护下对链表进行读写操作。

2023-12-17 20:58:05 814

原创 FeignClient定义在被调用方

而将 Feign 客户端定义在被调用方的接口上,则可以使得调用方更加简洁,只需要定义接口和相关注解,无需关心实际的服务提供方和实现细节。需要注意的是,在实际开发中,有些场景可能需要将 Feign 客户端定义在调用方的接口上,例如当多个调用方需要调用相同的服务接口时,可以将 Feign 客户端集中在一个公共的模块中,以便调用方进行统一的管理和配置。在这两个示例中,@FeignClient 注解定义在被调用方的接口上,而不是调用方的接口上,这是因为这些接口是服务提供方暴露给外部调用方的服务接口。

2023-12-15 19:32:10 640

原创 优化 SQL

总之,SQL 优化需要根据具体的业务场景和数据库特点来进行,通过合理的索引设计、查询语句优化以及数据库结构的优化,可以显著提升数据库的性能和响应速度。创建适当的索引:对经常查询的列或联合查询的多个列创建合适的索引,能够显著提高查询性能。定期分析和优化查询计划:通过使用 EXPLAIN 或其他相关工具,分析查询执行计划,查看是否有索引失效、大表连接等问题,并进行相应的优化。合理分割大表:对于特别大的表,可以考虑进行水平分割,将数据拆分到多个物理表中,减少单个表的数据量,提高查询和维护效率。

2023-12-15 14:14:37 591

原创 mysql前缀索引

针对上述问题,通常建议使用更适合的数据结构来构建前缀索引,例如 Trie 树、压缩字典树(Trie Tree with compression)、前缀哈希树等。冲突问题:字符串作为索引键时,如果存在多个字符串具有相同前缀,就会导致键的冲突。这可能会导致哈希冲突或者树结构中的重复节点,降低索引的效率,增加搜索时间。精确匹配问题:字符串作为索引键时,只能通过完全匹配前缀来搜索符合条件的字符串。尽管前缀索引在某些情况下可以提供高效的搜索性能,但不建议将字符串直接用作前缀索引的键。

2023-12-15 14:14:03 554

原创 泛型的原理

在编译时,所有的泛型类型都会被擦除成原始类型。例如,一个 `List<String>` 类型的变量,在编译时会被擦除成 `List` 类型。但是,擦除机制也带来了一些问题,比如无法在运行时获取泛型参数的具体类型。为了解决泛型擦除带来的问题,Java 采用了泛型补偿机制,即在编译时自动插入一些类型转换代码,以保证程序的正确性。在编译时,Java 编译器会自动插入一些类型转换代码,以保证程序的正确性。它可以让我们在编写代码时使用抽象的类型,而在运行时根据具体的类型来实现相应的操作。

2023-12-14 17:56:25 346

原创 安装并使用vue3脚手架ajax

5. 在项目中使用 Axios:在 Vue 项目中,可以将 Axios 封装成 Vue 插件并挂载到 Vue 实例上,这样在组件中就可以直接调用 this.$http 发送 Ajax 请求了。2. 安装 Vue CLI:Vue CLI 是一个官方提供的命令行工具,可以帮助我们快速创建和管理 Vue 项目。在创建好的 Vue 项目中,可以使用 npm 安装 Axios。6. 在组件中使用 this.$http 发送 Ajax 请求:在 Vue 组件中,可以使用 this.$http 发送 Ajax 请求。

2023-12-14 17:54:48 651

原创 MySQL数据库的缓存

1. 查询缓存(Query Cache):查询缓存是MySQL服务器在接收到一个查询请求时,会先检查该查询是否已经被缓存过,如果缓存命中,则直接返回缓存的查询结果,避免了重新执行查询的开销。当执行一个查询语句时,MySQL会先查看查询缓存中是否有相同的查询语句及其结果,如果存在则直接返回缓存的结果,而不需要再执行实际的查询操作。需要注意的是,MySQL的缓存机制可以提高数据库的性能,但也需要根据具体的应用场景和硬件配置进行调优,以获得最佳的性能表现。MySQL的查询缓存是在服务器的内存中进行管理和存储的。

2023-12-14 17:52:02 1435

原创 权限验证思路

接着,将生成的密文与Redis中存储的密文进行比较,若相同则验证通过,允许返回用户的信息。接下来,将生成的UUID作为键,对应的密文作为值存储到Redis中,并为键值对设置合理的过期时间,以确保数据不会长时间存储而导致安全隐患。当用户进行登录时,服务端会生成一个新的UUID作为用户会话的唯一标识,并将该UUID与用户ID组合生成密文,存储到Redis中。在实际操作中,需要考虑各种异常情况的处理,如Redis连接失败、密文比对失败等,需要针对这些情况设计相应的容错和恢复机制,以确保系统的稳定性和可靠性。

2023-12-13 20:26:13 385

原创 如何计算接口的访问耗时,如何提升接口的访问耗时,并如何计算访问耗时降低了多少

要计算访问耗时降低了多少,可以使用前述的计算方法,对优化前后的接口访问耗时进行比较。例如,假设在优化前接口的平均访问耗时为100毫秒,在优化后降低到50毫秒,那么访问耗时的降低量就是优化前减去优化后的数值,即100毫秒 - 50毫秒 = 50毫秒。1. 优化算法和数据结构:评估代码中的算法和数据结构,选择更高效的实现方式,以减少不必要的计算和操作,从而提升接口的执行速度。需要注意的是,以上提到的方法和计算方式只是一般性的指导,具体的实施和计算方式还需要根据项目需求和具体情况来确定。

2023-12-13 15:55:11 862

原创 如何计算存储百分比,如何降低存储百分比,如何计算存储降低了多少百分比

计算存储降低了多少百分比时,需要先确定优化前后的存储大小,并使用以上公式进行计算。例如,如果优化前的存储大小是100MB,优化后的存储大小是80MB,那么存储降低了(100MB - 80MB)/ 100MB × 100% = 20%。例如,如果原始数据大小是100MB,优化后的数据大小是80MB,那么存储百分比就是(100MB - 80MB)/ 100MB × 100% = 20%。需要注意的是,以上提到的方法和计算方式只是一般性的指导,具体的实施和计算方式还需要根据项目需求和具体情况来确定。

2023-12-13 15:53:54 546

原创 Mybatis 中,实现一对多关系

3. 嵌套结果(Nested Results):使用嵌套结果可以将查询结果分别映射到主对象和子对象中,然后通过 Java 对象的关联属性将两个对象关联起来。1. 嵌套查询(Nested Queries):使用嵌套查询可以在一个 SQL 语句中同时查询主表和从表的数据,然后通过关联字段将两个数据集合并到一起。2. 延迟加载(Lazy Loading):使用延迟加载可以在需要时再去加载子对象,避免在查询主对象时额外地查询子对象。开发者可以根据需求选择合适的方式,实现高效、灵活的数据查询和操作。

2023-12-12 20:37:10 795

原创 Mybatis的缓存

在同一个 SqlSession 中,执行相同的 SQL 语句,第一次查询时会将查询结果缓存到一级缓存中,再次查询时就可以直接从缓存中获取数据,避免了重复查询数据库的操作。而如果在刚刚执行过的同一个 SqlSession 中修改了数据,则会将一级缓存中对应的数据清空,以保证数据的实时性。需要注意的是,二级缓存并不是默认开启的,而且它并不能缓存所有类型的查询结果。在上面的示例中,我们开启了二级缓存,并在 UserMapper 的定义中设置了缓存的相关配置。Mybatis的缓存分为一级缓存和二级缓存。

2023-12-12 20:24:31 394

原创 RocketMQ如何保证消息不丢失

因此,在使用RocketMQ时,建议根据业务需求合理配置参数,并进行适当的监控和容灾措施,以最大程度地保证消息的可靠传输。消息发送到主节点后,主节点会将消息同步到从节点,确保主节点宕机时,从节点能够接替主节点的角色继续提供服务,从而避免消息丢失。3. 同步刷盘:RocketMQ提供了同步刷盘机制,即在消息发送完成后,立即将消息写入磁盘,并等待磁盘写操作完成后再返回发送结果。4. 备份机制:RocketMQ支持配置数据备份策略,可以将消息备份到不同的Broker节点上,以提高消息的容错性和可靠性。

2023-12-12 20:08:53 2456

原创 RocketMQ中的消息堆积

4. 优化消费者的处理逻辑:检查消费者的处理逻辑是否存在效率低下的地方,是否有不必要的网络请求或计算操作。可以对消费者的代码进行优化,提高处理消息的效率。同时,也可以参考RocketMQ的官方文档和社区讨论,了解更多关于消息堆积处理的经验和建议。1. 增加消费者数量:通过增加消费者的数量,可以提高消息的消费速度,缩短消息的堆积时间。3. 扩大消息队列的容量:如果消息堆积严重,可以考虑扩大消息队列的容量,以容纳更多的消息。2. 调整消费者的并发数:通过调整消费者的并发数,可以增加消费者处理消息的能力。

2023-12-12 20:08:15 1435

原创 SQL 注入

1. 使用参数化查询(Prepared Statements):使用参数化查询可以将 SQL 查询和用户提供的输入分开处理,将用户输入作为参数传递给数据库引擎,而不是将用户输入直接拼接到 SQL 语句中。SQL 注入是一种常见的安全漏洞,攻击者通过构造恶意的 SQL 语句,使得应用程序在执行 SQL 查询时执行了非预期的操作,可能导致数据泄露、数据篡改或者其他恶意行为。6. 定期更新和修补软件:保持数据库和应用程序的安全性,定期更新和修补软件中的漏洞,以及使用防火墙和安全设备来检测和拦截潜在的攻击。

2023-12-12 17:45:22 410

原创 手动创建一个线程池,并配置相应的参数

请注意,根据您的具体需求,还可以使用其他类型的线程池,例如 `Executors.newCachedThreadPool()` 或 `Executors.newScheduledThreadPool()`。在上述示例中,我们使用 `Executors.newFixedThreadPool()` 方法手动创建了一个固定大小的线程池,并通过类型转换将其转为 `ThreadPoolExecutor` 类型,以便设置额外的参数。如果系统提供的线程池参数无法使用,您可以自己手动创建一个线程池,并配置相应的参数。

2023-12-11 16:30:04 361

原创 子类不会覆盖父类的构造函数,相反为什么必须一开始调用父类的构造函数。

Java中,默认情况下,如果子类的构造函数没有显式地调用父类的构造函数,那么编译器会隐式地插入一条默认的super()语句,即调用父类的无参构造函数。如果父类没有无参构造函数,或者需要调用父类的其他构造函数,则需要在子类的构造函数中显式地使用super关键字来调用适当的父类构造函数。通过调用父类的构造函数,可以确保父类中定义的实例变量和其他成员在子类对象被创建之前得到正确的初始化。总之,子类需要在构造函数中调用父类的构造函数,以确保正确初始化父类的状态,并在此基础上完成自身的初始化。

2023-12-11 10:32:45 467

原创 sql优化的方式

2. 编写高效的查询语句:优化查询语句的编写方式,避免使用不必要的连接、子查询和函数等复杂操作。根据查询的字段和条件,选择合适的列创建索引,并确保索引的选择性较高。10. 避免大事务和长时间的事务:长时间的事务会占用资源,并可能导致锁竞争和性能下降,尽量将事务分解为较小的、短时间的事务。9. 使用合理的数据库连接池:使用连接池可以减少数据库连接的创建和关闭的开销,提高数据库连接的复用性和性能。4. 适当分拆大的SQL语句:对于复杂的SQL语句,可以将其拆分成多个较简单的语句,减少单次查询的数据量。

2023-12-09 11:00:04 469

原创 复合主键与代理主键的各自优缺点

3. 支持复杂查询条件:复合主键可以方便地对多个列进行查询和索引,尤其在需要按照多个列进行筛选和排序的情况下,具有一定的优势。2. 运行效率较高:代理主键通常是自增或有规则生成的唯一标识符,这样可以更高效地插入和查询数据,避免了复合主键的复杂性。2. 较少冗余数据:相比代理主键,复合主键不需要额外的列来存储唯一标识符,因此可以减少一定的存储空间和冗余数据。1. 简单性和易用性:代理主键使用一个单独的列作为主键,使得表的设计和操作相对简单,减少了复杂性。复合主键和代理主键是在数据库设计中常见的两种方式。

2023-12-08 13:09:23 648

原创 复合主键与代理主键和B+树之间的关系

总之,使用代理主键进行查询比使用复合主键要更加方便和高效,这也是为什么大多数数据库设计都采用代理主键作为主键的原因之一。1. 复合主键的查询效率受到多个列的影响,其查询条件需要涉及所有的主键列,所以复合主键需要创建复合索引才能提高查询效率。2. 代理主键:代理主键是使用一个单独的列作为主键,其值为系统自动生成的唯一标识符。2. 复合主键的查询效率与主键列的顺序有关,如果查询条件中只使用部分主键列或者主键列的顺序与创建复合索引时的顺序不同,查询效率会下降。3. 复合主键的维护成本高,需要在多个列上进行维护。

2023-12-08 13:08:16 328

原创 为什么查询时候使用代理主键的整型数字比复合主键字符串要好

整型数字作为代理主键可以更好地利用索引结构,因为整型数据通常具有更好的连续性和顺序性,适合于B+树等索引结构的构建和查询。相比之下,字符串类型的复合主键由于长度和字符排序的影响,可能导致索引结构的碎片化和查询效率下降。3. 存取效率:在内存中进行数据操作时,整型数字的存取效率通常会比字符串类型的复合主键更高。整型数字通常不需要进行额外的转换、验证和格式化操作,而字符串类型的复合主键可能需要进行更复杂的处理。相比之下,字符串类型的复合主键通常需要更多的存储空间,尤其是当主键列较长或者存在多个组合键时。

2023-12-08 13:07:19 487

原创 为什么查询时候使用代理主键的整型数字比复合主键字符串要好?这与B+树又有什么关系

相比之下,字符串类型的复合主键可能由于字符排序的影响,导致B+树的结构变得更加复杂,从而影响查询性能。在B+树的存储结构中,整型数据的紧凑性能够更好地利用磁盘存储空间,并且在内存中的缓存效果也更好。相比之下,字符串类型的复合主键可能需要更多的存储空间,影响存储和内存的利用效率。整型数字的连续性和有序性使得B+树在构建和维护索引时更加高效,而字符串类型的复合主键可能会导致索引结构的碎片化和维护成本增加。B+树是一种常用的索引结构,它对于不同类型的主键具有不同的适用性。

2023-12-08 13:05:53 358

原创 批量添加到数据库

mybatis中的这三种批量添加1、逐个insert操作:适用于少量数据插入,每次使用都要调用数据库连接,频繁使用会浪费资源,效率低2、foreach标签:使用foreach可以减少数据库连接的调用,效率比insert高3、batch模式:当数据特别多时效率比foreach标签高.具体怎么实现。总的来说,MybatisPlus 的 insertBatchSomeColumn 方法适用于插入数据较少的情况,而使用 JDBC 提供的批处理提交可以提高插入数据的效率,适用于插入数据较多的情况。

2023-12-07 20:49:24 469

原创 项目中使用redis的缺点有哪些

尽管直接使用 MySQL 存储数据具有上述优点,但也需要注意,在某些场景下,引入 Redis 可能会带来性能和扩展性上的优势。2. 数据量较小:如果项目的数据量较小,可以被 MySQL 轻松处理,并且不需要频繁的读写操作,那么引入 Redis 可能会显得过于复杂,直接使用 MySQL 可以满足需求。4. 成本考虑:使用 Redis 会增加硬件成本(内存成本)以及运维成本,如果项目的预算有限或者不想增加额外的成本,直接使用 MySQL 可能是一个更经济实惠的选择。

2023-12-07 20:14:40 877

原创 MyBatis 中批量插入数据

在上述代码中,首先通过 `sqlSessionFactory.openSession(ExecutorType.BATCH)` 方法创建了一个 BatchExecutor 类型的 SqlSession,然后通过循环遍历 `userList`,将每个元素插入到数据库中。BatchExecutor 可以将一组 SQL 语句打包成批处理语句,这样可以减少与数据库的通信次数,从而提高性能。在上述代码中,`<foreach>` 标签会遍历传入的 `List` 集合,并将集合中的每个元素按照指定格式插入到数据库中。

2023-12-07 19:58:28 937

原创 mybatis和mybatis-plus中批量插入的解决办法

2. 使用 MyBatis-Plus 提供的批量插入方法:MyBatis-Plus 中提供了 `com.baomidou.mybatisplus.extension.service.IService` 接口的 `saveBatch()` 和 `saveOrUpdateBatch()` 方法,可以实现批量插入数据。你可以根据具体情况选择合适的方式。在上述代码中,我们重写了 `saveBatch()` 方法,调用了父类的 `saveBatch()` 方法,并设置了批量插入的数量为 100。

2023-12-07 19:57:55 1304

原创 No servers available for service: api.tushare.projava.lang.IllegalStateException: No instances ava

3. 负载均衡策略不合适:如果服务实例比较少,或者客户端和服务端在同一台机器上运行,那么默认的轮询策略就足够了。但如果服务实例很多,或者客户端和服务端在不同的区域,那么需要使用更高级别的负载均衡策略,比如基于权重或者响应时间的策略。2. 没有启动服务实例:请确保你要访问的服务实例已经启动并且成功注册到了服务注册中心。你可以在服务注册中心的界面上查看是否有该服务实例的信息。1. 服务名或者实例名拼写错误:请确保你使用的服务名或者实例名是正确的。你可以在服务注册中心或者配置中心里查看服务名和实例名的具体信息。

2023-12-07 19:52:37 942

原创 用户会话保存

通过将会话数据保存在共享的数据库中,不同的服务器可以访问和更新相同的会话数据。在设计分布式系统时,还需要考虑会话管理的一致性和容错性,以确保在系统中的多个组件之间正确地传递和同步会话数据。5. JWT(JSON Web Token):JWT是一种轻量级的身份验证和授权机制,可以将用户会话信息编码为一个安全的令牌。4. Cookie:可以使用浏览器的Cookie来存储会话标识符,而将实际的会话数据保存在服务器端。1. 服务器内存:最简单的方式是将用户会话保存在应用程序服务器的内存中。

2023-12-07 12:47:45 760

原创 各限流算法

为了解决临界突发流量,可以将窗口划分为多个更细粒度的单元,每次窗口向右移动一个单元,于。想要达到限流的目的,又不会掐断流量,使得流量更加平滑?由于速率固定,即使在某个时刻下游处理能力过剩,也不能得到很好的利用,这是漏桶算法的一个。限流和瞬时流量其实并不矛盾,在大多数场景中,短时间突发流量系统是完全可以接受的。固定窗口算法实现简单,性能高,但是会有临界突发流量问题,瞬时流量最大可以达到阈值的。限流算法并没有绝对的好劣之分,如何选择合适的限流算法呢?当桶中没有剩余流量时则限流速率最低,为令牌生成的速率。

2023-12-06 19:34:08 349

原创 NIO的实现原理(Selector)

poll是一种轮询机制,相比于Selector的阻塞机制,避免了线程的阻塞和唤醒,因此性能更高。NIO的实现原理(Selector)多路复用器 Java NIO中的关键组件是Selector,它是一个多路复用器,可以同时监控多个通道上是否有数据可读或可写。Selector会将注册在其上的通道以及对应的事件类型注册到内核中,然后使用select方法等待事件就绪,一旦有事件就绪(如数据已经准备好可以读取),Selector就会通知应用程序进行读写操作。

2023-12-06 19:30:54 413 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除