自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 什么是消息队列

消息队列是一种在不同应用程序或组件之间传递消息的数据结构。它可以实现异步通信,也就是发送方将消息放入队列后无需等待接收方立即处理,可以继续进行其他操作。接收方则按照一定的规则从队列中获取消息并进行处理。消息队列常用于解耦系统的各个组件,提高系统的可扩展性和容错性。例如,在一个电商系统中,订单处理模块生成订单后,可以将订单信息放入消息队列,而后续的库存管理、物流配送等模块从队列中获取订单信息进行处理,各个模块之间不需要直接相互依赖和等待。想象一下在一家繁忙的餐厅。

2024-12-30 10:47:36 280

原创 Mybatis的一级、二级缓存

【代码】Mybatis的一级、二级缓存。

2024-12-16 21:04:49 264

原创 Mybatis的延迟加载及原理

调用目标方法时,如果发现是null值,则执行SQL查询。获取数据后,设置属性值并继续查询目标方法。使用CGLIB创建目标对象的代理对象。

2024-12-16 17:17:28 177

原创 MyBatis的执行流程

当调用`userMapper.selectUserById(1)`时,代理对象会找到对应的SQL语句(在`UserMapper.xml`中定义),执行查询操作,将查询结果按照映射关系(也是在`UserMapper.xml`中定义)转换为`User`对象并返回。例如,如果`resultMap`定义了`id`列对应`User`对象的`id`属性,`name`列对应`User`对象的`name`属性,那么在查询后,会将列值正确地赋给`User`对象的属性。- MyBatis采用接口编程的方式。

2024-12-16 17:04:33 1571

原创 SSM中的常见注解

将Controller方法返回的对象转化为JSON。等,用于简化Spring MVC的配置。:接收HTTP请求的JSON数据。:从请求路径中获取参数。:指定请求参数名称。

2024-12-16 16:14:48 211

原创 Springboot自动配置原理

文件中的类名,根据条件注解决定是否将配置类中的Bean导入到Spring容器中。Spring Boot的自动配置原理基于。导入配置选择器,读取。

2024-12-16 16:10:14 244

原创 SpringMVC的执行流程

【代码】SpringMVC的执行流程。

2024-12-16 16:00:53 422

原创 循环引用的解决方法

由于构造函数是bean生命周期中最先执行的,Spring框架无法解决构造方法的循环依赖问题。A对象初始化时,由于B已创建完成,可以直接注入B,A创建成功存入一级缓存。B通过二级缓存获得A对象后,B创建成功,存入一级缓存。懒加载注解,延迟bean的创建直到实际需要时。A在初始化时需要B对象,开始B的创建逻辑。B需要注入A,通过三级缓存获取。清除二级缓存中的临时对象A。生成A对象,存入二级缓存。实例化A对象,并创建。B实例化完成,也创建。

2024-12-16 11:12:47 385

原创 Spring中的循环引用

【代码】Spring中的循环引用。

2024-12-16 11:04:25 167

原创 Spring中bean的生命周期

【代码】Spring中bean的生命周期。

2024-12-16 10:46:40 393

原创 Spring中常见的事务失效场景

【代码】Spring中常见的事务失效场景。

2024-12-16 10:27:16 314

原创 Spring中的AOP

【代码】Spring中的AOP。

2024-12-16 10:10:19 385

原创 MySQL的分库分表

分库分表的定义与背景分库分表的策略分库分表带来的挑战与解决方法

2024-12-13 22:37:59 281

原创 MySQL主从同步的原理

主从架构概述主从同步的基本原理步骤主从同步中的关键技术点总结:

2024-12-13 22:20:06 247

原创 什么是MVCC

MVCC 的定义(多版本并发控制)MVCC 的实现原理MVCC 的优势MVCC 的应用场景和限制

2024-12-13 22:16:02 569

原创 undo log和redo log的区别

定义和功能存储内容差异使用场景差异对数据库性能的影响差异

2024-12-13 21:33:52 428 1

原创 事务的特性、并发事务带来的问题及其解决方法

事务的特性是ACID,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。例如,A向B转账500元,这个操作要么都成功,要么都失败,体现了原子性。转账过程中数据要保持一致,A扣除了500元,B必须增加500元。隔离性体现在A向B转账时,不受其他事务干扰。持久性体现在事务提交后,数据要被持久化存储。

2024-12-13 21:24:51 1419

原创 索引创建原则及失效情况

最左匹配原则是指在查询条件中使用组合索引时,必须从组合索引的最左边(第一个)列开始连续使用索引列,才能有效地利用索引。因为索引是按照列的原始值进行构建和存储的,使用函数或表达式后,数据库无法直接利用索引来定位数据。因为索引是按照一定顺序存储列的值,以通配符开头的模糊查询需要扫描索引中的大部分数据来找到匹配的记录。列的索引在这个范围内不能很好地用于精准定位,所以这个条件就无法有效地利用索引,导致索引失效。的记录时,需要对前面范围查询返回的记录进行额外的检查,而不是通过索引快速定位,从而影响查询性能。

2024-12-13 15:31:02 289

原创 MySQL覆盖索引

问题分析优化方法

2024-12-13 14:56:26 487

原创 索引及其底层

B树的非叶子节点和叶子节点都存放数据,而B+树的所有数据只出现在叶子节点,这使得B+树在查询时效率更稳定。B+树在进行范围查询时效率更高,因为所有数据都在叶子节点,并且叶子节点之间形成了双向链表。非聚簇索引则是数据与索引分开存储,B+树的叶子节点保存的是主键值,可以有多个非聚簇索引,通常我们自定义的索引都是非聚簇索引。聚簇索引是指数据与索引放在一起,B+树的叶子节点保存了整行数据,通常只有一个聚簇索引,一般是由主键构成。

2024-12-13 14:40:26 533

原创 MySql中的慢查询

1同时,可以设置参数来定义什么样的查询被认为是 “慢查询”。这个参数的单位是秒,默认值通常是 10 秒(不同版本可能不同)。2.外部工具:部署运维监控系统Skywalking,在它的报表展示中可以看到哪个接口慢,并且能分析出接口中哪部分耗时较多,包括具体的SQL执行时间,这样就能定位到出现问题的SQL。

2024-12-13 11:44:52 387

原创 I/O多路复用模型

(1)完全基于内存的,C语言编写。(2)采用单线程,避免不必要的上下文切换和竞争条件。(3)使用多路I/O复用模型,非阻塞IO。都是在后台执行操作,不影响主线程的正常使用,不会产生阻塞。

2024-12-13 10:55:47 1265

原创 Redis的集群方案

当然,如果在RDB生成执行期间,依然有请求到了主节点,而主节点会以命令的方式记录到缓冲区,缓冲区是一个日志文件,最后把这个日志文件发送给从节点,这样就能保证主节点与从节点完全一致了,后期再同步数据的时候,都是依赖于这个日志文件,这个就是全量同步。增量同步指的是,当从节点服务重启之后,数据就不一致了,所以这个时候,从节点会请求主节点同步数据,主节点还是判断不是第一次请求,不是第一次就获取从节点的offset值,然后主节点从命令日志中获取offset值之后的数据,发送给从节点进行数据同步。

2024-12-13 09:39:04 450

原创 Redis分布式锁

【代码】Redis分布式锁。

2024-12-12 22:42:32 366

原创 Redis的数据过期和淘汰策略

在redis中提供了两种数据过期删除策略。第一种是惰性删除。在设置该key过期时间后,我们不去管它。当需要该key时,我们检查其是否过期。如果过期,我们就删掉它;反之,返回该key。第二种是定期删除。就是说,每隔一段时间,我们就对一些key进行检查,并删除里面过期的key。定期清理的两种模式是:,是定时任务,执行频率默认为10hz,每次不超过25ms,可以通过修改配置文件redis.conf的hz选项来调整这个次数;

2024-12-12 22:07:33 693

原创 redis的数据持久化

在Redis中提供了两种数据持久化的方式:RDB(Redis Database Backup)和 AOF(Append Only File)savesave 900 1SAVEBGSAVESAVEBGSAVEBGSAVESAVE。

2024-12-12 14:40:21 522

原创 MySql与Redis的数据同步

(一)延时双删第一次删除:当数据库中的数据需要更新时,首先会删除缓存中的对应数据。这是为了防止后续的读取操作获取到旧的缓存数据,导致数据不一致。例如,数据库中有一个用户信息表,缓存中存储了用户的基本信息。当用户修改了自己的手机号码后,系统会先将缓存中该用户的信息删除。 延迟及第二次删除:由于数据库的更新操作可能是一个复杂的过程,存在一定的时间差,在这个时间差内可能会有其他操作尝试读取缓存(因为缓存删除操作可能还没完全生效),导致缓存又被重新写入旧的数据。为了避免这种情况,在第一次删除缓存后,系统会等待

2024-12-12 14:23:25 304

原创 缓存雪崩及解决方法

主缓存中的股票价格数据过期时间较短,例如设置为 1 分钟,从缓存中的过期时间设置为 5 分钟。数据首先存储在主缓存中,同时也在从缓存中有一份备份,但从缓存的过期时间设置得比主缓存长。在存储商品信息时,为其设置一个在 60 - 7200 秒之间的随机过期时间,而不是固定的过期时间,这样可以有效避免缓存雪崩。当主缓存数据过期后,从从缓存中获取数据,并更新主缓存。缓存雪崩是指在短时间内,大量缓存数据同时过期或缓存服务出现故障,导致大量请求直接访问数据库,使得数据库压力骤增,甚至可能导致数据库崩溃的现象。

2024-12-12 13:26:22 999

原创 缓存击穿及解决方法

获得分布式锁的节点从数据库中获取最新的价格数据,更新缓存后释放锁,其他节点就可以从更新后的缓存中获取价格数据。当缓存中的库存信息过期时,第一个访问库存信息的请求线程获取互斥锁,然后查询数据库中的库存数据,假设数据库中的库存为 100 件,这个线程将库存数据更新到缓存后,释放互斥锁。在这个线程查询数据并将其更新到缓存的过程中,其他并发请求会被互斥锁阻塞,等待第一个线程更新缓存后,它们就可以直接从缓存中获取数据,而不是直接访问数据库。:这种方法可能会导致缓存中的数据与数据库中的数据不一致,因为数据不会更新。

2024-12-12 13:13:18 674

原创 缓存穿透及解决方法

如果缓存中没有,就会去数据库等存储系统中查找,并将找到的数据放入缓存中,方便下次查询使用。例如,在一个电商系统中,正常的商品 ID 是 1 - 10000,攻击者发送大量商品 ID 为负数或者超大数值(如 99999999)的查询请求,而这些商品在数据库中并不存在。比如,一个根据用户 ID 查询用户信息的功能,在用户 ID 生成规则被错误修改后,可能会产生大量无效的用户 ID 请求,这些请求就会造成缓存穿透。缓存空对象:当从数据库查询数据为空时,在缓存中存储一个空对象,并设置较短的过期时间。

2024-12-12 13:07:52 148

空空如也

空空如也

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

TA关注的人

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