- 博客(45)
- 收藏
- 关注
原创 Swoole 进程模型
❸:Reactor 线程接收完一个完整请求数据后,将数据发给 Worker 进程处理(数据头部记录了 Reactor 的信息), Worker 进程执行我们的业务逻辑代码,之后将结果通过 Unxi Socket 发送结果给 Master 进程,(数据头部记录了 Reactor 的信息,请求的 fd 信息)。⑤:Worker 进程:负责处理 Reactor 线程通过 Unix Socket 投递的请求数据包,(这里编写我们的业务逻辑,执行完成后将数据发送到主进程)。
2025-04-23 11:04:25
584
原创 【mysql】读写分离数据一致性
在读写分离的架构中,"写后立刻读"读不到数据是一个常见问题,原因是写操作是在主库完成的,而读操作是从库进行的,由于主从同步有延迟,从库数据可能未及时同步最新的写入操作,导致读不到刚写入的数据。
2025-04-23 11:02:04
301
原创 【mysql】记录锁、间隙锁与临键锁
在MySQL的InnoDB存储引擎中,行锁是一种关键机制,用于在高并发环境下实现数据的一致性和隔离性。InnoDB支持三种主要的行锁类型:记录锁、间隙锁和临键锁。每种锁有不同的锁定范围和用途,用于处理各种并发控制场景。
2025-04-23 11:00:39
230
原创 【mysql】百万到千万级别数据量的优化方案
对于百万到千万级别的数据量,通过合理的数据库架构设计、索引优化、查询优化、配置调整、数据库维护和分布式架构,可以显著提高 MySQL 数据库的性能和可扩展性。根据具体的业务需求和系统环境,选择适合的优化策略,确保数据库系统能够高效地处理大规模数据。在 MySQL 中,处理百万到千万级别的数据量时,优化策略是确保数据库性能和响应速度的关键。
2025-04-23 10:59:46
538
原创 【mysql】数据库的垂直切分与水平切分
水平切分是将一个表的不同数据行分成多个表的过程。每个新表包含原表的一部分行,而表的结构(列)保持一致。常用于数据量过大时,通过将数据分布到不同的物理存储中来提高性能和管理效率。垂直切分是将一个表的不同列分成多个表的过程。在设计和实施这些切分策略时,需要根据具体的业务需求和数据库系统的特性进行选择和调整。通过合理的切分策略,可以显著提高数据库的性能和可扩展性。在实际操作中,可以使用范围切分(如按年份分表)或哈希切分(如按用户 ID 的哈希值分表)来决定数据如何分配到不同的表中。是两种常用的数据分片技术。
2025-04-23 10:58:28
277
原创 【mysql】数据库三范式
第一范式 (1NF):确保每列都是原子性的,且每列数据不可分割。第二范式 (2NF):在满足1NF的基础上,确保每个非主属性完全依赖于主键。第三范式 (3NF):在满足2NF的基础上,确保非主属性不依赖于其他非主属性,消除传递依赖。通过应用这些范式,可以帮助设计出更具逻辑性、更加规范的数据库结构,减少数据冗余和维护复杂性。
2025-04-23 10:57:16
380
原创 悲观锁与乐观锁区别及使用场景
悲观锁:在事务执行期间锁定数据,以确保一致性和完整性,适用于高冲突或复杂事务场景。缺点是可能导致性能下降和死锁。乐观锁:假设数据冲突不会发生,减少了锁的竞争,适用于低冲突环境或需要高并发性能的场景。缺点是处理冲突和重试可能增加复杂性。根据应用场景和业务需求选择合适的锁策略,可以有效地管理并发访问和数据一致性。
2025-04-23 10:48:46
411
原创 【mysql】什么情况下建立索引
适合建索引的列:经常被查询、排序、连接、作为主键或唯一性列、选择性高的列。不适合建索引的列:低选择性、频繁更新的列,模糊查询使用在前的列,大文本字段,以及很少被查询的列。选择是否建立索引需要综合考虑查询需求、性能和维护开销。
2025-04-23 10:47:21
898
原创 【mysql】索引失效原因
了解这些导致索引失效的情况有助于在设计数据库表和编写查询时做出更合适的选择,从而提高查询性能。在实际应用中,结合具体的场景进行优化和测试,以确保索引的有效利用。
2025-04-23 10:46:43
319
原创 软件设计模式——七大设计原则
设计原则一句话归纳目的开闭原则对扩展开放,对修改关闭降低维护带来的新风险依赖倒置原则高层不应该依赖低层,要面向接口编程更利于代码结构的升级扩展单一职责原则一个类只干一件事,实现类要单一便于理解,提高代码的可读性接口隔离原则一个接口只干一件事,接口要精简单一功能解耦,高聚合、低耦合迪米特法则不该知道的不要知道,一个类应该保持对其它对象最少的了解,降低耦合度只和朋友交流,不和陌生人说话,减少代码臃肿里氏替换原则。
2025-04-23 10:38:54
918
原创 Go协程的栈内存管理
Go 协程(Goroutine)的栈内存管理是 Go 语言设计中一个重要的优化点。它通过灵活的栈增长策略,确保 Goroutine 能够高效地使用内存,支持高并发。
2025-04-10 14:18:56
262
原创 【kafka】消费者策略、Rebalance机制、Offset存储机制
消费者策略:Kafka 允许单独消费者或消费者组共同消费消息,消费者组内部可以根据不同的分区分配策略来分配Partition。Rebalance 机制:消费者组在消费者数量变化或分区变化时会触发 Rebalance。Rebalance 是分区重新分配的过程,但频繁的 Rebalance 会影响消费的稳定性。Offset 存储机制:Kafka 提供多种 Offset 存储方式,主要通过 Kafka 自身的内置存储来跟踪消费进度,并提供多种 Offset 提交和重置策略,确保消费的灵活性和可靠性。
2025-04-09 06:00:00
986
原创 【kafka】消费调优
使用 Kafka 监控工具(如 Confluent Control Center、Prometheus + Grafana)监控消费者的性能,发现瓶颈并进行调整。:增加消费者实例,利用多个消费者并行处理消息。:确保消费者能够在适当的时间内处理消息,防止因超时导致的重新平衡。通过这些调优策略,可以提高 Kafka 消费者的性能和稳定性。,设置一次从 Kafka 拉取多条消息,减少网络往返次数。,根据业务需求选择适当的偏移重置策略。:优化消息处理逻辑,确保消费者在。,优化消息拉取的效率。
2025-04-09 06:00:00
104
原创 【redis】缓存穿透、击穿、雪崩、预热、更新、降级
缓存穿透指的是请求直接绕过缓存系统,直接访问数据库或其他存储系统。这种情况通常发生在请求的数据既不在缓存中也不在数据库中,导致缓存系统无法拦截请求,所有请求都直接到达数据库,造成数据库负担过重。
2025-04-09 00:41:44
340
原创 【redis】分布式锁-Redlock原理分析
是 Redis 提供的一种分布式锁算法,旨在确保在分布式环境下实现安全、可靠的锁定机制。它基于 Redis 的单节点锁机制(SET NX + EXPIRE),但在多个 Redis 实例上扩展,以提供更高的容错性和可用性。
2025-04-09 00:40:45
558
原创 为什么要使用消息队列
解耦:降低系统组件之间的耦合,使得系统更加灵活和易扩展。削峰填谷:通过缓冲瞬时高峰流量,避免系统因瞬时流量过大而崩溃。异步处理:提升系统响应速度,避免长时间阻塞。容错与持久化:确保消息不会因系统故障丢失,增强系统的容错能力。实时数据处理:对大量数据流进行实时处理,适用于大数据和数据分析场景。多订阅与广播:支持一个生产者对应多个消费者的模式,实现消息的多路传播。提升性能与并发:通过分布式并发消费提升系统处理能力。
2025-04-09 00:35:33
865
原创 【golang】GC垃圾回收算法
Go 的垃圾回收器通过标记-清除算法、三色标记、写屏障、增量式回收和并发标记清除等技术,确保了高效的内存管理,同时尽量减少了对应用程序运行的影响。通过合理的垃圾回收策略和调优,开发者可以在性能和内存使用之间找到平衡点。
2025-04-09 00:30:57
818
原创 【golang】读写分离 sync.Map
是 Go 语言中的一个并发安全的映射(map)实现,设计目的是为了在高并发环境下提高读操作的性能。它支持读写分离,以优化读操作的性能,同时保持对写操作的安全性。提供了一种并发安全的映射实现,通过内部的读写分离机制优化了读操作的性能。它特别适用于高并发读多写少的场景。的实现原理可以帮助你在需要处理大量并发读写操作的应用程序中做出更好的选择。
2025-04-09 00:27:11
386
原创 【redis】如何处理网络延迟和网络异常
在使用 Redis 搭建分布式系统时,网络延迟和网络异常是两个不可避免的挑战。妥善处理这些问题对于保证系统的高可用性和一致性至关重要。以下是一些常见的策略和实践方法来应对这些问题。
2025-04-09 00:26:02
801
原创 【redis】布隆过滤器
是一种空间效率极高的概率型数据结构,用于判断一个元素是否属于一个集合。它允许一定程度的误判,即可能会错误地认为一个不在集合中的元素属于集合(假阳性),但绝不会漏判(即不会把一个在集合中的元素判断为不在集合中)。Redis 通过RedisBloom模块支持布隆过滤器。
2025-04-09 00:22:37
416
原创 【golang】slice实践以及底层原理
的底层实现有助于编写高效的 Go 代码,尤其是在处理大量数据或需要高性能的并发程序时。)取决于从切片的起始位置到底层数组末尾的元素数量。切片操作不会复制底层数组的数据,而是通过指针引用。是 Go 语言中非常强大的数据结构,它提供了动态数组的功能,同时在性能上也有很好的表现。的容量,Go 运行时会自动创建一个新的底层数组,并将旧数组的元素复制到新数组中。是一种非常常用的数据结构,它是对数组的一个抽象和封装。提供了灵活的动态数组操作,底层通过数组实现。的实践和底层实现对编写高效的 Go 程序至关重要。
2025-04-09 00:00:00
487
原创 【redis】五大数据类型实现原理
Redis 的五大数据类型 String、Hash、List、Set、ZSet 分别通过不同的数据结构实现,充分利用了内存数据库的特性,满足了不同场景下的数据存储和访问需求。通过这些底层实现,Redis 能够在高性能的同时,提供灵活的数据操作方式。
2025-04-08 20:58:52
874
原创 【kafka】架构原理及存储机制
Kafka 通过分布式架构、多副本机制、Leader 选举和顺序写磁盘的设计,确保了系统的高可用性、可靠性和高效性。Kafka 的存储机制基于分区日志的顺序写入和段存储,结合日志压缩和消息保留策略,提供了灵活的数据存储和读取功能。在现代分布式系统中,Kafka 是一种可靠的消息队列和流处理平台。
2025-04-08 17:00:00
628
原创 【kafka】如何保证高可用
Kafka 作为一个分布式消息队列系统,设计了多种机制来保证其。这些机制确保在部分节点出现故障的情况下,集群依然能够正常工作,数据不会丢失。
2025-04-08 16:45:00
528
原创 LRU 算法及其实现方式
LRU 是一种经典的缓存淘汰算法,适用于那些数据访问具有时间局部性(即最近访问的数据很可能会再次访问)的场景。通过使用双向链表和哈希表,LRU 能在 O(1) 时间复杂度内高效管理缓存,但在某些高性能场景下,可能会需要进一步的优化或结合其他算法(如 LFU)来应对特殊需求。LRU(Least Recently Used,最近最少使用)算法是一种常见的缓存淘汰算法,用于在缓存满时决定哪些数据应该被移除,以腾出空间存放新数据。:使用两个栈来实现 LRU,一个用于保存缓存数据的顺序,另一个用于辅助操作。
2025-04-08 16:15:00
551
原创 【golang】CSP并发模型
Golang 的 CSP 并发模型通过 Goroutine 和 Channel 实现了简洁且高效的并发编程方式。在这种模型中,Goroutine 是执行单元,而 Channel 是它们之间通信的桥梁,通过通信来共享内存,而不是通过共享内存来通信。这种模型不仅提高了程序的并发能力,还减少了编程中的复杂性。
2025-04-08 12:11:14
457
原创 【kafka】高性能高效率的原因
每个分区的数据存储和处理都是独立的,这样就可以通过水平扩展来增加吞吐量和容错能力。每个段都是一个独立的文件,这使得日志文件的管理更加高效,并且可以更容易地进行压缩和删除旧数据。这使得消费者可以根据自己的速度来拉取数据,避免了因为生产者的速度问题导致的性能瓶颈。它使用了类似于LSM树的结构来处理写入和读取,减少了存储和读取的开销。这些设计和技术使得 Kafka 能够处理大规模的数据流,并提供高吞吐量和低延迟的数据处理能力。:Kafka 支持批量发送和接收消息,这降低了网络和磁盘的开销,提高了吞吐量。
2025-04-08 12:04:15
204
原创 【golang】Context的使用场景
在 Go 语言中,context包提供了一种在 goroutine 之间传递信号的方法,用于管理请求的生命周期和控制并发操作。context。
2025-04-08 12:00:24
341
原创 HTTP协议中的OPTIONS
OPTIONS方法主要用于客户端在执行请求前探测服务器支持的能力或设置。它是实现跨域请求处理的重要部分,尤其在现代Web应用中非常常见。
2025-04-07 01:52:12
187
原创 HTTP 与 HTTPS 区别
HTTP 和 HTTPS 的主要区别在于安全性,HTTPS 通过 SSL/TLS 加密通信数据,确保数据的机密性、完整性和身份验证。这使得 HTTPS 更适合处理敏感信息和进行安全交易,例如在网上银行、购物网站和其他需要保护用户数据的场景中使用。
2025-04-07 01:50:16
363
原创 HTTP 1.0,1.1,2.0 的区别
HTTP 1.0:每次请求都需要建立和关闭连接,效率较低,功能简单。HTTP 1.1:引入了持久连接和请求管线化,优化了连接管理和缓存控制,增加了对虚拟主机的支持。HTTP 2.0:采用二进制传输,多路复用,头部压缩和服务器推送等新特性,显著提升了传输效率和用户体验。
2025-04-07 01:49:21
309
原创 MySQL 主从复制原理
MySQL 主从复制是数据库高可用性架构中的重要组成部分,通过异步或半同步复制机制,从库可以高效同步主库的数据,支持读写分离和负载均衡。
2025-04-07 01:33:21
692
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人