自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis缓存雪崩、击穿、穿透、预热

通过在网关层面进行限流,可以快速失败并返回给客户端,从而保护后端服务的稳定性。因此,在设计系统时,除了考虑key的过期时间外,还需要考虑Redis的内存管理和淘汰策略。指在一个高并发的系统中,由于大量的缓存数据在同一时间段内过期或失效,导致大量请求无法从缓存中获取数据,因此大量并发请求可能导致数据库服务器过载,甚至宕机,从而引发整个系统崩溃。如果这些数据在缓存中的过期时间设置得过于集中,或者缓存服务器突然宕机,那么在数据过期或缓存失效的瞬间,大量请求会直接访问数据库,导致数据库负载剧增,可能引发。

2024-03-30 18:43:09 620

原创 布隆过滤器原理

主要由于哈希函数可能存在冲突(即不同的元素映射到相同的位置),因此一旦某个位置被设置为1,它就可能表示多个元素。但是,这样做可能会影响到其他也映射到这些位置的元素,因为无法确定哪些1是由当前要删除的元素设置的,哪些是由其他元素设置的。使用Google Guava库中的布隆过滤器(Bloom Filter)功能展示如何创建一个布隆过滤器,并如何使用它来检查元素是否可能存在于集合中。如图示,“易”字在最后的位置计算的hash值对应为0,判定不存在集合中。假设,现有一个集合【码,道】,我们查找某元素是否存在?

2024-03-30 11:41:56 621

原创 Redis调优-BigKey如何处理?

SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。没有对Key中的成员进行合理的拆分将大key变成小key,从而造成个别Key中一直往value里面塞数据,没有删除机制,未定期清理无效数据,导致不断增加。:Redis中的大key,实际上指的是key所关联的value值特别大,或者是某种数据结构(如hash, set, zset, list)中存储了过多的元素。

2024-03-24 13:39:16 651

原创 分库分表实战-Sharding-JDBC

ComplexShardingStrategy支持多分片键,由于多分片键之间的关系复杂,因此并未进行过多的封装,而是直接将分片键值组合以及分片操作符透传至分片算法,完全由应用开发者实现,提供最大的灵活度。由于分片算法和业务实现紧密相关,因此并未提供内置分片算法,而是通过分片策略将各种场景提炼出来,提供更高层级的抽象,并提供接口让应用开发者自行实现分片算法。垂直分表的意义用于:单行的某些字段数据很大,表占用空间很大,在读写时,严重降低性能,此时需要将拆分到另外一张表,且与原表是一对一的关系,这就是垂直分表。

2024-03-17 21:39:55 428

原创 趣谈设计模式

本章我们只谈常用的几种设计模式,通过设计模式的理念、规约、到应用,理解实战中如何正确使用设计模式,不论对面试还是实际工作中都有益处。规定:软件中的对象(类、模块、函数等等)应该对于扩展是开放的,但是对于修改是封闭的。一个请求会按照定义的拦截器顺序,逐个被处理,直到找到对应的处理器或者遍历完所有的拦截器。Spring IoC容器负责创建对象实例,并确保在整个应用中,针对同一个Bean的ID,只实例化一次对象。在用户登录流程中,可能用到拦截器做鉴权校验,日志记录接口参数等,使用了一些常见的设计模式。

2024-03-05 10:02:51 382

原创 JVM调优实战(二)- 生产OOM案例

在一个高并发的在线支付系统中,由于每个支付请求都需要创建一个新的处理线程,系统在高峰时段会同时处理数千个支付请求,从而创建了大量的线程。由于短时间内产生大量垃圾对象,垃圾回收器频繁触发,占用了大量的计算资源,导致实际垃圾回收时间超过了98%的执行时间,最终抛出。每个请求都会创建一个新的线程。: 是指系统在同一时刻实际处理的请求或事务的数量,反映了系统可以同时承载的正常使用系统功能的用户的数量。:复杂的业务接口查询可能涉及多表联查、大量数据计算和聚合等操作,这些操作都可能消耗大量的系统资源,从而影响性能。

2024-02-29 11:35:35 438

原创 JVM调优实战(一)

使用命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但它们无法获取方法级别的分析数据,如方法间的调用关系、各方法的调用次数和调用时间等(这对定位应用性能瓶颈至关重要)。注意: 生成堆转储文件可能会对正在运行的 JVM 产生性能影响,特别是在堆内存很大的情况下。基于Eclipse的内存分析工具,是一个快速、功能丰富的Java heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。:在生产环境部署之前,模拟业务场景和硬件设备,在测试环境中验证所选参数的效果,确保它们能够满足应用程序的需求。

2024-02-26 00:19:45 989

原创 分库分表设计及常见问题

根据订单的创建时间,将tb_order分成tb_order_2022, tb_order_2023, tb_order_2024等多个表,每个表存储各自时间段的订单数据。第三层:因为innodb的叶子节点,是直接包含整条mysql数据的,假设每条数据以1kb计算,那么第三层每个节点为16kb,那么每个节点是可以放16个数据的,所以最终mysql可以存储的总数据为。例如,将订单相关的表保留在db_order中,将用户相关的表迁移到新的数据库db_user中,商品相关的表迁移到db_product中。

2024-02-18 00:55:33 589

原创 项目实战中的异步设计

在后台系统中,快递公司可以通过合理的任务调度,处理多个异步请求,提高寄件服务的整体吞吐量。这种方式类似于在后端异步处理任务,而用户无需等待任务完成,可以继续进行其他操作,提高了整个寄件过程的并发性和响应性。系统会在后台异步处理你的请求,安排合适的快递员前来取件。channel(通道): 是网络通信的载体,提供了基本的API用于网络I/0 操作如register、bind、connect、read、write、flush 等Netty自己实现的 Channel是以JDK NIO Channel为基础的。

2024-01-14 02:28:34 855

原创 如何写好一份技术类求职简历

当然,有时这招也不好使,遇上了也没关系,自己弥补就可以,因为不同的面试官能力不一样,思考方式和做事方式也有差异。有的同学认为内容多显得简历丰富,但是个人认为如果你工作3~5年,做过的项目可能有很多,对于无法突出亮点的内容可以不写。信息缓存:这是简历被推荐后个人在企业的留痕,因为企业每天接受上千份简历,不得不说,信息对标很难实现,简历可以起到缓存作用。静心做好我们的事情。自我价值体现(重要):在企业看来,简历是个人的门面,虽然你的能力到位,但是简历写的很普通无法进入面试环节,便会使获得面试的机会大大折扣。

2024-01-12 21:18:13 878

原创 常见的几种数据同步方案

感兴趣的可以深究,这里只想说明:对大数据量处理,包括数据提取,数据加载,增量数据同步,可以借助这些工具,ETL工具提供了一些可视化的组件+配置具体的链接类型。但是因为引入新的组件,在多数据源的情况下,不可避免的带来系统的复杂性。这种就是常见的SQL脚本,常用于数据割接,错误数据修改,包括配置数据,业务字段,运维手工调整异常数据等。如上,比如:例子中的触发器是在tb_order表中插入新数据时触发的,将新数据同步到tb_order_his表中(读者可以根据需要调整触发器的触发时机和逻辑)

2024-01-07 16:31:41 1213

原创 热乎的分布式锁解决方案

当一个线程持有一个对象的锁时,它可以再次获取相同对象的锁,而不会被阻塞。5、获取锁: 获取锁时,Lua 脚本会检查当前线程是否已经持有锁。获取锁的过程包括判断是否锁已经被其他线程持有,如果没有,则设置锁的所有者和计数器。释放锁的过程包括判断是否锁的所有者是当前线程,如果是,则释放锁。的方式能有效解决并发安全问题,适用于一些读多写少的场景,尤其是对于短事务、容忍性好的应用场景,它能够提高系统的并发性和吞吐量。常见的分布式锁解决方案如下,我们通过详细的介绍,清晰的对比,简易的理解方式为读者打开新的视角。

2023-12-27 00:13:30 19

原创 热乎的分布式锁解决方案

当一个线程持有一个对象的锁时,它可以再次获取相同对象的锁,而不会被阻塞。5、获取锁: 获取锁时,Lua 脚本会检查当前线程是否已经持有锁。获取锁的过程包括判断是否锁已经被其他线程持有,如果没有,则设置锁的所有者和计数器。释放锁的过程包括判断是否锁的所有者是当前线程,如果是,则释放锁。的方式能有效解决并发安全问题,适用于一些读多写少的场景,尤其是对于短事务、容忍性好的应用场景,它能够提高系统的并发性和吞吐量。常见的分布式锁解决方案如下,我们通过详细的介绍,清晰的对比,简易的理解方式为读者打开新的视角。

2023-12-27 00:04:27 15

原创 聊聊MVCC那点事

MVCC(Multi-Version Concurrency Control)是 MySQL 和其他一些数据库管理系统中用于管理并发访问的一种技术。MVCC 允许多个事务同时访问数据库,而不会出现数据冲突和不一致性的问题。事务隔离级别是关系型数据库中用于控制并发事务之间互相干扰的程度综上,我们重点对事务隔离级别及解决了那些问题,存在那些问题进行整理。隔离级别脏读非重复读幻读阻塞问题读未提交✗✗✗✗读已提交✓✗✗✗可重复读✓✓✗✗串行化✓✓✓✓。

2023-12-18 00:45:40 13

原创 Seata安装和配置

启动seata-server,(注意在nacos正常启动前,否则会闪退) 在:${bshPath}\seata\bin 下点击seata-server.bat启动。因为Seata的启动需要nacos,所以先下载安装和启动nacos.详细介绍安装、配置和启动。至此,Seata测试用例的基本环境安装和配置一准备完毕!下载地址:https://github.com/alibaba/nacos/releases。下载地址:https://seata.io/en-us/blog/download.html。

2023-12-18 00:44:09 39

原创 一站式分布式事务Seata方案

Seata分布式事务方案默认AT模式,代码无入侵,使用简单,在数据一致性要求比较高的系统中,是很好的分布式事务解决方案。解析 SQL 语义,找到“业务 SQL”要更新的业务数据,在业务数据被更新前,将其保存成“before image”;二阶段如果是回滚的话,Seata 就需要回滚一阶段已经执行的“业务 SQL”,还原业务数据。如果两份数据完全一致就说明没有脏写,可以还原业务数据,如果不一致就说明有脏写,出现脏写就需要转人工处理。

2023-12-18 00:41:52 14

原创 分布式事务技术选型

方案设计没有绝美,只有合适和高效。引言上一篇介绍了分布式事务的基础理论认识,这章我们重点针对业界常用分布式解决方案作比较,深入理解在实际工程经验中如何合理选择对应的分布式事务解决方案。阅读此文,你将收获:进入正题之前,我们先用一个生活的例子说明一个简单的事务是怎样形成的,就行这章图中,正如完成一场田径比赛,我们复盘下需要做哪些人和事的准备。角色扮演:裁判员:负责安排起跑前准备动作的合规性+发令枪;运动员:准备就位+完成起跑和冲刺注意事项:就位:远动员起跑前复合规定要求;

2023-12-18 00:40:00 30

原创 分布式事务基础理论

举个生活中的例子:你去小卖铺买东西,“一手交钱,一手交货”就是一个事务的例子,交钱和交货必须全部成功,事务才算成功,任一个活动失败,事务将撤销所有已成功的活动。事务的定义: 事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。

2023-12-18 00:34:05 23

原创 Redis分布式锁使用及问题解决

文本主要从超卖案例切入,在控制并发的问题上,先后在单机环境和分布式环境下使用JVM锁进行测试(有关JVM锁还有Lock、CAS等,读者可根据兴趣探究,此处不详细做介绍),解决了单机环境并发问题,但是在分布式环境下引入了新的问题。问题一:@link1加锁和@link2超时设置是分开执行的,如果@link1执行成功,@link2执行失败,则锁得不到释放,造成死锁。某些数据可能需要更短的过期时间,以确保及时性,而对于一些相对静态的数据,可以设置较长的过期时间。为了避免类似的情况发生,我们通过加锁的方式控制并发。

2023-12-18 00:30:54 12

原创 Redis分布式锁方案实施

文本主要从超卖案例切入,在控制并发的问题上,先后在单机环境和分布式环境下使用JVM锁进行测试(有关JVM锁还有Lock、CAS等,读者可根据兴趣探究,此处不详细做介绍),解决了单机环境并发问题,但是在分布式环境下引入了新的问题。问题一:@link1加锁和@link2超时设置是分开执行的,如果@link1执行成功,@link2执行失败,则锁得不到释放,造成死锁。某些数据可能需要更短的过期时间,以确保及时性,而对于一些相对静态的数据,可以设置较长的过期时间。为了避免类似的情况发生,我们通过加锁的方式控制并发。

2023-12-18 00:06:53 18

原创 一站式分布式事务Seata方案

Seata分布式事务方案默认AT模式,代码无入侵,使用简单,在数据一致性要求比较高的系统中,是很好的分布式事务解决方案。解析 SQL 语义,找到“业务 SQL”要更新的业务数据,在业务数据被更新前,将其保存成“before image”;二阶段如果是回滚的话,Seata 就需要回滚一阶段已经执行的“业务 SQL”,还原业务数据。如果两份数据完全一致就说明没有脏写,可以还原业务数据,如果不一致就说明有脏写,出现脏写就需要转人工处理。

2023-12-07 01:15:19 47

原创 Seata安装和配置

为方便测试使用,这里选择了较低windows版本,读者可自行在官网下载和安装对应版本。因为Seata的启动需要nacos,所以先下载安装和启动nacos.至此,Seata测试用例的基本环境安装和配置一准备完毕!期待下一篇实操和原理。下载地址:https://github.com/alibaba/nacos/releases。下载地址:https://seata.io/en-us/blog/download.html。在:${bshPath}\seata\bin 下点击seata-server.bat启动。

2023-12-05 00:36:21 183

原创 如何选择分布式事务解决方案?

这里可以使用MQ的ack(即消息确认)机制,消费者监听MQ,如果消费者接收到消息并且业务处理完成后向MQ发送ack(即消息确认),此时说明消费者正常消费消息完成,MQ将不再向消费者推送消息,否则消费者会不断重试向消费者来发送消息。如果执行Producer端本地事务过程中,执行端挂掉,或者超时,MQ Server将会不停的询问同组的其他 Producer来获取事务执行状态,这个过程叫事务回查。在3PC中,如果参与者在准备阶段无法完成准备,它可以通知协调者,从而避免长时间的阻塞。

2023-12-02 20:35:45 20

原创 【MySQL】终于有人把MVCC说清楚了

不可重复读在"读已提交"隔离级别下仍然可能发生,但在"可重复读"和"串行化"隔离级别下被阻止。:幻读是指一个事务在多次查询相同范围的数据时,发现了新的数据行或者丢失了已存在的数据行。在脏读的情况下,事务可能会读取到不稳定或错误的数据。百年之后,我们的记忆或许如今日的土建工程师看待中世纪大教堂建造者使用的技法一样陈旧,但是,我们的匠心会因此得到尊重。这样,可以跟踪每个事务对数据所做的修改,并且不同的事务可以访问不同版本的数据。:每个事务在开始时获得一个数据快照,这个快照包含了事务在启动时数据库中的数据状态。

2023-11-04 18:26:53 24

空空如也

空空如也

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

TA关注的人

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