- 博客(66)
- 收藏
- 关注
原创 JSON Web Token在登陆中的使用
Header(头部):通常包含签名的算法信息(例如 HMAC SHA256 或 RSA)。Payload(负载):包含声明(Claims)。声明可以是关于实体(通常是用户)的信息,或者元数据。JWT 的负载部分是 base64 编码的。Signature(签名):签名是用来验证 JWT 数据是否被篡改的。它通过将 header 和 payload 使用私钥加密生成,确保 JWT 的数据安全性和完整性。@Component@Overridetry {// 去掉 "Bearer " 前缀。
2025-02-24 22:06:19
1026
原创 Seata基本使用及二阶提交流程
AT 模式:适用于标准的数据库操作,自动管理事务,适合不涉及复杂业务逻辑的场景。TCC 模式:适用于跨多个服务的复杂业务,需要手动编写补偿逻辑。SAGA 模式:适用于长事务,适合拆分为多个子事务的场景,每个子事务都可以独立回滚。XA 模式:严格一致性的分布式事务协议,适用于需要强一致性的场景,如金融交易等。
2025-02-18 13:22:07
751
原创 Spring Cloud Gateway中断言路由和过滤器的使用
我们通过继承类,创建了一个名为/*** 自定义路由断言工厂*/@Component// 传入Config类@Override// 返回配置类中的字段顺序@Override@Override// 获取请求// 从请求的查询参数中获取 'param' 对应的值// 比较查询参数的值与配置中的 'value' 是否匹配// 配置类// 查询参数名称// 查询参数期望的值// Getter和Setter方法类该类继承自,实现了自定义断言工厂的功能。
2025-02-17 12:51:07
1447
原创 SpringCloud中OpenFeign远程调用
Bean// 设置日志级别Retryer添加请求头@Component/*** 请求拦截器* @param template 请求模板*/@Override@Component@Override// 返回默认值或做错误处理。
2025-02-11 12:14:10
722
原创 基于Redis的Stream消息队列实现异步秒杀
这是秒杀逻辑的入口,负责调用 Redis 中的 Lua 脚本以完成高并发场景下的秒杀操作,包含库存校验、扣减库存、用户下单记录以及异步下单的消息发送。通过全局唯一的订单 ID 和 Lua 脚本原子性,确保秒杀操作在高并发下的性能与一致性,并根据脚本返回结果快速响应用户秒杀请求。4.完成下单项目启动时开启一个线程任务,尝试获取消息队列中的订单信息。
2025-01-16 18:11:43
839
原创 Redis消息队列
Redis的LIST数据结构支持双向链表操作,可以作为简单的消息队列来使用。通过Lpush(从左插入)和Rpop(从右取出)实现消息的生产和消费。
2025-01-13 12:10:13
701
原创 高并发场景下秒杀券的库存超卖问题(乐观锁解决)
时才会执行扣减操作。如果多个请求同时扣减库存,把当前的查询到的。的条件,其他请求会因为条件不满足而失败。首先通过更新语句,将。
2024-12-16 14:17:45
877
原创 Redis 全局 ID 的生成
Redis 全局 ID 是一种基于时间戳和序列号生成的全局唯一标识符。生成逻辑依赖 Redis 的自增操作(),并结合一定的时间位移计算,保证在分布式系统中 ID 的唯一性和有序性。
2024-12-11 22:05:58
413
原创 ThreadLocal 的概念及使用场景(登录状态验证)
是 Java 提供的一种存储每个线程独立变量的方法,非常适合处理每个线程需要有独立变量副本的场景。适用场景适合用户上下文信息存储、事务管理、数据库连接管理等需要在线程中共享数据但与其他线程独立的数据。优点:它的最大优点是避免了显式的同步操作,提供了线程安全的数据隔离。注意事项:要小心使用,防止内存泄漏。适时调用remove()方法清理数据是最佳实践。在登录系统中,比如登录状态验证中,可以很好地保证每个用户请求的线程都有自己的用户信息,从而避免了线程数据的干扰,确保系统的安全性和稳定性。
2024-11-10 20:36:30
731
原创 登陆验证中的cookie和session对比
Cookie:Cookie 是一种存储在客户端(如浏览器)的小数据。它通常被服务器生成并发送给客户端,之后在每次请求时由客户端将其附带返回服务器,从而实现用户的身份识别和状态管理。Session:Session 是一种服务器端的会话机制,用于跟踪特定用户的状态和数据。通常会在服务器中为每个用户维护一个唯一的session,用以存储用户的数据,如登录状态等。Cookie用于存储session_id,帮助服务器识别客户端的身份。Session存储在服务器端,保存用户登录状态和相关数据。
2024-11-08 19:48:08
419
原创 VUEX的介绍和使用方式
Vuex 是专为 Vue.js 应用设计的状态管理模式,它可以帮助开发者在组件之间更方便地共享数据。Vuex 使用集中化的方式来管理应用的状态,将应用中所有共享的状态存储在一个 store 中。这样可以避免组件之间因为数据共享而产生的复杂交互,提升代码的可维护性和可扩展性。Vuex 的核心思想是将应用状态集中存储在一个地方,并且只有通过特定的方式(mutations)才能修改这些状态,从而保证数据的可预测性和一致性。
2024-11-03 15:23:52
1012
原创 Spring Task介绍与基本使用
简单集成:它是 Spring 框架的一部分,无需额外配置,使用方便。强大的调度功能:支持多种方式的任务调度,例如固定频率、固定延迟以及 Cron 表达式。支持并发执行:可以灵活配置任务执行的线程池,管理并发任务的执行。@Bean// 设置线程池大小秒 分 时 日 月 周 [年]秒(0-59)分(0-59)时(0-23)日(1-31)月(1-12)周(0-7,其中0和7都表示周日)例如,")表示每天中午 12 点执行。
2024-10-20 16:12:41
726
1
原创 Mybatis中遍历List内容进行动态SQL拼接
定义了 MyBatis 的查询映射,:表示集合中的每一项在循环时的变量名。集合,将其生成 SQL 的。:表示生成的 SQL 中。:指定传入的集合名称。
2024-09-30 11:58:38
331
原创 Springboot中基于注解实现公共字段自动填充
AutoFill自定义注解用于标识某个方法需要进行公共字段的自动填充。注解包含一个刚才定义枚举值,用于指定该方法对应的数据库操作类型,是插入还是更新。我下面对重要内容进行解释:标注该注解只能应用在方法上。:指定该注解在运行时保留,可以通过反射机制获取该注解。:这个方法定义了注解的一个属性,必须设置枚举值(INSERT或UPDATE),来表示操作类型。/*** 自定义注解,用于标识某个方法需要进行功能字段自动填充*/// 数据库操作类型:UPDATE 或 INSERT。
2024-09-29 23:04:39
1049
原创 Nginx配置负载均衡
upstream通过Nginx的负载均衡功能,可以轻松地将请求分发到多台服务器,从而提高系统的可用性、容错性和处理能力。根据不同的应用场景,选择合适的负载均衡策略(如轮询、权重、IP哈希、最少连接)来优化系统的性能。默认轮询:适用于负载相对均衡的后端服务器。权重:适合不同性能服务器的场景,能够合理分配负载。IP哈希:适用于需要会话保持的场景。最少连接数:适用于处理请求时间差异较大的场景。
2024-09-17 20:29:18
4474
原创 RabbitMQ的Direct Exchange模式实现的消息发布案例
表示自动应答(auto-acknowledge),即消息处理完毕后,RabbitMQ会自动确认消息已成功处理。如果需要手动应答,可以将。:消费者的队列名称、交换机名称和路由键与生产者保持一致,即监听。获取消息内容,随后可以对消息进行处理、存储或其他业务逻辑操作。来定义收到消息后的处理逻辑。Consumer消费者代码。队列,并接收路由键为。,并在处理完成后调用。
2024-09-11 22:23:04
721
原创 Redis中事务与乐观锁
会失败,事务不会执行。这时可以选择重新执行整个操作,确保数据一致性。此时就相当于SQL中的乐观锁功能。此时我想在一个事务中更新多个相关联的键,并希望确保在执行过程中这些键不会被其他客户端修改。被其他客户端修改了,
2024-08-25 20:36:10
270
原创 Redis模型中Geospatia、HyperLogLog、Bitmap使用
【代码】redis模型中Geospatia、HyperLogLog、Bitmap使用。
2024-08-16 11:53:11
431
原创 Linux中基本目录介绍
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。: 这个目录中存放着在不断扩充的东西,我们引用数据库经常会涉及到的目录放在这个目录下。: 用户的主目录,在Linux中,每个用户都有一个自己的目录,一般这目录名是以用户的账号命名的。: 这个目录是用来存放一些临时文件的。用完即删除的文件,可以放在这个目录下,安全!: 这个目录用来存放所有的系统管理所需要的配置文件和子目录。: 这是系统管理员,也称作超级管理员的用户目录。
2024-07-27 21:17:41
260
1
原创 springboot中resource目录介绍与Thymeleaf使用
访问性static中的资源可以直接被 Web 浏览器请求和获取,而templates目录中的文件则需要经过服务器处理(如填充数据、执行逻辑)才能形成最终的页面。交互性templates目录下的文件通常包含动态内容,需要填充数据,适用于用户界面的动态交互,而static更多用于提供不会频繁变动的客户端代码和资源。技术实现static目录的处理较为简单,主要涉及静态文件的服务;templates的处理则复杂,涉及到模板引擎的选择和配置,以及与后端数据的动态绑定。
2024-07-25 11:19:03
565
原创 SpringBoot中JSR303校验
JSR 303 是 Java EE 的一种标准,用于基于注解的对象数据验证。在Spring Boot应用中,你可以通过添加注解直接在POJO类中声明验证规则。这样可以确保在使用这些对象进行操作之前,它们满足业务规则。个人认为非常有用的,因为它减少了代码中的校验逻辑,使得校验逻辑更加集中且易于管理。
2024-07-23 16:53:18
371
原创 springboot给属性赋值的两种方式(yaml与properties)
在Spring Boot中,配置文件是用来设置应用程序的各种参数和操作模式的重要部分。Spring Boot支持两种主要类型的配置文件:properties文件和YAML文件。这两种文件都可以用来定义相同的配置,但它们在格式和表达能力上有所不同。
2024-07-23 16:39:21
726
1
原创 Spring MVC中Restful风格引入
支持注解:Spring的RestController和RequestMapping等注解使得创建RESTful服务变得简单直观。数据绑定:自动的数据绑定支持,可以将请求自动转换为模型对象,同时也支持多种数据格式的响应,如XML、JSON等。异常处理:通过ExceptionHandler提供了统一的异常处理机制。依赖注入:利用Spring的依赖注入优势,更好地管理服务层。{id} :用户的唯一标识符。{a}和{b}:这两个参数可以用于业务逻辑中的其他目的,比如作为查询参数或用于修改返回的数据。
2024-07-12 20:03:23
720
原创 MyBatis中复杂查询(一对多和多对一)
在MyBatis中处理一对多(1)和多对一(N:1)关系是常见的需求,尤其是在操作数据库中存在关联表时。这些关系的管理能让数据查询更加直观和灵活。下面分别介绍如何在MyBatis中配置和查询这两种类型的关系。
2024-07-05 14:54:16
413
原创 Mybatis使用注解开发
通过以上步骤,可以实现 MyBatis 的注解开发,使得持久层代码更加清晰,减少了 XML 配置的繁琐,提高了开发效率。在实际应用中,还需要考虑事务管理、连接池配置等因素以保证应用的健売和性能。
2024-07-04 14:32:36
351
原创 Mybatis实现流程
创建一个MyBatis映射器XML文件,用于映射SQL查询到 UserDAO接口。//此处对应接口类//标签id="getList"对应接口的方法名字
2024-06-30 18:28:14
303
原创 Spring动态代理详解
私有成员变量rent:它是Rent接口的一个实现,代表被代理的对象。setRent 方法:用于设置代理的目标对象。getProxy 方法:利用ProxynewProxyInstance方法生成代理对象。这个方法需要三个参数:类加载器,接口数组(代理类需要实现的接口),以及一个InvocationHandler实例(当前对象this)。invoke 方法:这是代理实例的方法调用时实际执行的代码。invoke方法可以在调用目标方法前后添加自定义逻辑,本例中只是简单地调用了目标对象的相应方法。//租房。
2024-06-29 13:23:46
869
原创 javaweb中ServletContext的使用
ServletContext是一个强大的 web 应用程序级别的对象,它允许不同的 servlet 共享数据和资源。通过它,开发者可以在 servlet 间传递信息、访问全局资源和记录日志,从而使得 web 应用程序的不同部分能够更好地集成和协作。它特别适合处理那些需要跨多个 servlet 维护状态或共享配置信息的情况。
2024-06-20 22:33:31
443
原创 FactoryBean 接口的使用
Override@Override@Test//获取IOC容器在上述示例中,当请求时,实际上Spring容器会调用的方法返回实例。在Spring中提供了一个强大的机制,用于封装单个对象的创建逻辑,特别是当对象的创建过程比较复杂时(如需要多步骤配置或依赖外部系统资源)。通过使用,可以保持Spring配置的简洁性,同时将复杂的实例化逻辑封装在容易管理的Java类中。
2024-06-11 23:27:14
387
1
原创 Spring中获取bean的三种常用方式
在Spring框架中,一个bean是指由SpringIOC容器管理的一个Java对象。Spring提供了一种依赖注入的机制,可以通过在配置文件中配置bean的定义,实现在代码中通过IOC容器获取bean的实例。根据名称获取Bean方法二根据类型获取Bean方法三 (推荐)根据名称+类型来获取Bean
2024-06-11 17:14:22
874
原创 TCP三次握手四次挥手及time_wait状态解析
如上图,在服务器端发送一个FIN时,客户端会处于time_wait状态。当处于time_wait状态时,我们无法创建新的连接,因为端口被占用。
2023-04-14 14:10:44
1223
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人