- 博客(29)
- 收藏
- 关注
原创 Redis主从同步与对象模型
摘要: Redis提供RDB快照和AOF日志两种持久化方式,RDB适合快速恢复但可能丢数据,AOF保证数据安全但恢复较慢。混合持久化结合两者优势,在AOF重写时首部写入RDB格式,尾部追加增量命令。Redis采用写时复制技术降低持久化对性能的影响。内存淘汰策略包括LRU/LFU等算法,可配置为不同场景优化。主从复制通过全量/增量同步实现数据冗余,哨兵模式则提供自动故障转移能力,构建高可用架构。合理配置持久化策略与高可用方案是保障Redis数据安全与稳定运行的关键。
2026-04-02 12:50:24
783
原创 Redis存储原理与数据模型
本文深入剖析Redis的存储原理与数据模型,澄清了“Redis单线程”的误解——其命令执行虽为单线程,却通过IO多路复用、后台线程及6.0引入的IO多线程,高效处理高并发。文章详解了`redisObject`与多种底层编码(如字符串的int/embstr/raw、列表的quicklist、哈希与有序集合的ziplist转换等),揭示其在内存与性能间的精妙平衡。同时,深入讲解了跳表的结构优势、全局哈希表的渐进式rehash机制,以及IO多线程如何突破网络瓶颈。
2026-04-01 10:09:28
594
原创 Redis 协议与异步方式
Redis作为高性能键值存储系统,其核心机制包括RESP协议、管道技术、事务处理和Lua脚本。RESP协议采用简单文本格式实现高效通信;Pipeline通过批量发送命令减少网络往返时间;事务通过MULTI/EXEC命令保证命令序列的隔离执行,支持WATCH实现乐观锁;Lua脚本提供更强大的原子操作能力,支持复杂业务逻辑。这些特性使Redis在保证性能的同时,能够灵活应对不同场景下的数据操作需求,是高并发应用的理想选择。
2026-04-01 10:06:17
538
原创 Redis 相关命令详解及其原理
文章详细介绍了 Redis 的安装方法(包管理器和源码编译),并深入剖析了其单线程模型和底层数据结构原理。重点讲解了 String 和 List 两种基础数据类型,包括 String 的三种编码方式(int/embstr/raw)和 List 的 quicklist 实现结构,列举了各类型的常用命令及其时间复杂度,并给出了缓存、计数器、分布式锁等典型应用场景。后续内容预计将继续解析其他数据类型和 Redis 高级功能。
2026-03-31 09:07:03
402
原创 MySQL缓存策略
本文介绍了MySQL缓存策略的核心内容,重点分析了如何通过Redis缓存热点数据来提升系统性能。文章首先概述了缓存方案的目的和背景,对比了内存与磁盘访问速度的差异。然后详细阐述了缓存与MySQL的数据一致性状态,提出了读写策略的具体实现方法,包括读策略的安全优先和效率优先两种方案。此外,还介绍了MySQL主从复制流程、提升性能的多种手段(读写分离、连接池等),以及缓存穿透、击穿、雪崩等典型故障的解决方案。最后指出了缓存方案的潜在弊端和注意事项,强调需要在性能与一致性之间做出合理权衡。
2026-03-31 09:06:19
519
原创 MySQL事务原理分析
MySQL事务原理分析摘要 MySQL事务是保证数据一致性的核心机制,具有ACID四大特性:原子性(通过Undo Log实现)、一致性(应用与数据库共同保证)、隔离性(锁机制+MVCC)和持久性(Redo Log实现)。MySQL提供四种隔离级别:读未提交(脏读/不可重复读/幻读)、读已提交(解决脏读)、可重复读(InnoDB默认,基本解决幻读)和串行化(完全隔离)。不同级别通过MVCC和锁机制平衡并发性能与数据一致性。
2026-03-30 09:31:49
527
原创 MySQL索引原理以及SQL优化
本文系统介绍了MySQL索引原理与SQL优化策略。主要内容包括:1. 索引与约束的区别及类型(主键、唯一、普通等);2. B+树索引结构优势(多路搜索、顺序访问);3. InnoDB存储引擎核心组件(Buffer Pool、Change Buffer等);4. SQL优化原则(最左匹配、覆盖索引、索引下推);5. 常见索引失效场景及排查方法。通过合理设计索引和优化SQL,可显著提升查询性能与系统稳定性。
2026-03-30 09:30:43
390
原创 MySQL体系架构、CRUD
本文系统介绍了MySQL的体系架构和CRUD操作。主要内容包括:MySQL的C/S架构特点;Server层和存储引擎层的核心组件;SQL语句执行流程;数据库设计范式与反范式;SQL语言分类及约束;高级查询技巧;预处理语句的优势;视图与触发器的应用。通过深入解析MySQL内部机制,帮助开发者掌握数据库设计与优化方法,为学习高级主题奠定基础。文章兼顾理论与实践,既讲解底层原理,也提供实用代码示例。
2026-03-29 09:09:57
501
原创 spdlog异步日志方案
本文介绍了spdlog异步日志方案的关键特性与实现原理。spdlog是一个基于C++11的高性能日志库,具有零成本抽象、多线程安全等优势。其高效性源于编译时格式化、批量写入、无锁队列等技术。核心组件包括Logger、Sink、Formatter等,支持多种日志级别和输出目标。重点阐述了异步日志的实现机制:通过有界队列和后台线程分离I/O操作,降低业务线程延迟。文章还提供了安装方法和使用示例,帮助开发者快速集成这一高效日志方案。
2026-03-29 09:07:21
439
原创 死锁检测组件的设计
死锁检测组件实现摘要 本文介绍了一个基于图算法的死锁检测组件实现方案。该组件通过hook技术拦截pthread_mutex_lock/unlock和pthread_create调用,动态构建线程等待图,并周期性检测环路来发现死锁。核心设计包括: 使用邻接表存储线程等待关系图 维护锁-线程持有关系表 通过hook函数在加锁/解锁时更新等待图 独立检测线程定期执行DFS搜索环路。
2026-03-27 14:34:19
523
原创 分布式锁实现
本文介绍了分布式锁的概念及其在分布式系统中的重要性,重点探讨了基于Redis的RedLock算法实现。分布式锁用于协调多节点对共享资源的访问,需满足互斥性、超时释放、高可用性和容错性等特性。文章对比了数据库、ZooKeeper、etcd和Redis等实现方案,详细阐述了Redis单实例锁的局限性以及RedLock算法的多节点容错机制。RedLock通过在多数节点上加锁来提高可靠性,并提供了C++实现示例,包括加锁、解锁和续期等核心功能。
2026-03-27 14:30:58
377
原创 内存泄漏检测组件
内存泄漏是C/C++程序中由于动态分配的内存未正确释放导致的严重问题。与Java等具有垃圾回收机制的语言不同,C/C++需要程序员手动管理内存。常见泄漏场景包括忘记释放、释放不完全、指针覆盖和异常分支未处理等。 检测方法可分为三类:1)数据结构记录法,通过全局链表跟踪分配;2)文件标记法,用临时文件记录分配信息;3)Hook技术,通过动态链接器拦截系统调用。其中文件标记法实现简单但性能较差,Hook技术对业务透明但实现复杂。 线上解决方案建议采用热更新检测模块,通过动态开关平衡检测需求。
2026-03-17 08:55:54
512
原创 定时器设计
定时器是一种用于高效管理延时任务的基础模块,通过单线程处理大量定时任务,避免多线程忙等带来的资源浪费。它采用合适的数据结构(如红黑树、最小堆、时间轮)组织任务,并通过精准触发机制(sleep、epoll_wait、timerfd)唤醒线程处理到期任务。定时器广泛应用于心跳检测、会话超时、延迟任务等场景,是网络编程和系统开发的核心组件。文中给出了基于epoll和multimap的定时器实现示例,展示了如何高效管理定时任务。
2026-03-17 08:51:35
411
原创 用户态网络缓冲区设计
本文深入探讨了用户态网络缓冲区的设计原理与应用价值。文章首先解释了用户态缓冲区的概念,指出其作为应用层与内核协议栈之间的二级缓存,能够有效解决数据边界识别和流量控制问题。重点分析了接收缓冲区和发送缓冲区的必要性:接收缓冲区可处理TCP粘包/拆包问题并缓解数据到达速度过快的情况;发送缓冲区则能暂存未发送完的数据,避免应用阻塞。文章还介绍了Linux内核处理网络包的流程(DMA写入、中断处理、协议栈封装等),并给出一个高效的MessageBuffer实现方案,支持动态扩容、零拷贝读取等优化技术,为构建高性能网络
2026-03-15 12:41:08
383
原创 无锁队列设计
无锁队列是一种避免锁竞争的高性能并发数据结构,适用于多线程环境下的生产者和消费者模型。传统锁机制会导致线程阻塞、上下文切换等问题,而无锁队列通过原子操作(如CAS)和精心设计的数据结构实现线程安全访问。本文分析了无锁队列的优势(如减少线程切换开销和缓存污染)及其分类(SPSC、MPSC等),并详细介绍了SPSC环形缓冲区和MPSC链表队列的实现要点,包括内存对齐、原子操作优化及对象生命周期管理。无锁队列在实时系统和高并发场景中能显著提升性能,但需注意内存管理和内存顺序等挑战。
2026-03-15 12:38:01
622
原创 原子操作 CAS 与锁实现
本文深入探讨了多线程编程中的核心同步机制,从硬件缓存架构到高级编程实现。首先分析了CPU缓存一致性问题及MESI协议解决方案,接着阐述了原子操作的必要性和CAS原理,包括其ABA问题及应对策略。然后详细讲解了内存序的六种级别及其适用场景,对比了自旋锁与互斥锁的实现差异。最后以线程安全的shared_ptr实现为例,展示了原子操作在实际开发中的应用。全文由底向上系统性地剖析了多线程同步的底层机制与高级抽象,为开发者提供了深入理解并发编程的理论基础和实践指导。
2026-03-14 10:38:36
548
原创 MySQL连接池的实现
MySQL连接池技术通过复用预先建立的数据库连接,显著降低了高并发场景下的连接开销。本文深入探讨了数据库连接池的工作原理,对比了同步与异步连接池的区别,并提出一种基于C++的异步MySQL连接池实现方案。该方案采用工作线程模型,将SQL查询任务放入阻塞队列,由专用线程执行同步查询并通过Promise/Future机制异步返回结果。连接池负责管理连接生命周期,包括自动重连、连接有效性检测等功能,使应用程序无需关心底层连接管理细节,从而提升系统吞吐量和响应速度。
2026-03-14 09:52:22
659
原创 c++线程池实现
本文介绍了线程池的基本原理与实现方法。线程池通过复用固定数量的线程来执行任务,解决频繁创建/销毁线程的开销问题,提高并发性能。文章详细讲解了线程池的组成结构、工作原理和线程数选择策略,重点对比了单队列和双队列两种实现方式:单队列实现简单但可能存在锁竞争,双队列通过分离生产消费队列减少锁粒度。同时提供了完整的C++实现代码和测试示例,包括线程安全队列、任务提交接口和优雅关闭机制。最后指出可根据实际需求扩展返回值、超时等高级特性,为开发高效并发程序提供了实用参考。
2026-03-13 21:14:14
1002
原创 异步IO——io_uring的实现
本文介绍了Linux异步I/O框架io_uring的实现原理与应用。io_uring通过共享内存中的提交队列(SQ)和完成队列(CQ)实现高效异步I/O,相比epoll减少了系统调用开销。文章详细讲解了io_uring的架构、liburing库的两种安装方法,并展示了如何基于io_uring构建高性能TCP服务器。通过将accept、send/recv等操作异步化,io_uring显著提升了服务器并发处理能力,为高负载场景提供了更优的I/O解决方案。最后还提供了与传统epoll实现的性能对比分析。
2025-12-04 09:00:33
1139
原创 TCP简易发包工具实现(测qps)
本文介绍了一个简易TCP发包工具的实现,用于测试服务器QPS(每秒查询率)。该工具具有多线程并发、灵活配置、数据验证和性能统计功能。通过socket API建立TCP连接,支持128-512字节数据包测试,使用多线程均匀分配请求。测试结果显示成功/失败次数、总耗时和QPS值。该工具简单实用,可作为网络性能测试的基础框架,后续可扩展支持HTTP协议和分布式测试等高级功能。
2025-12-03 08:52:33
761
原创 DPDK实现用户态tcp、ip协议栈
摘要 本文介绍了DPDK(数据平面开发工具包)如何通过绕过Linux内核协议栈实现高性能网络数据处理。DPDK通过零拷贝技术直接将网卡数据映射到用户态内存池,避免了内核与用户态间的频繁切换。文章详细分析了传统Linux网络协议栈的瓶颈,并对比了DPDK的架构优势。同时阐述了TCP/IP五层网络模型及各层协议(以太网、IP、TCP/UDP)的数据封装过程。最后展示了使用DPDK实现简单UDP回显应用的关键步骤,包括环境初始化、数据接收处理等核心流程。DPDK通过用户态直接处理网络数据,显著提升了网络性能。
2025-12-02 09:00:45
1543
原创 DPDK的原理以及环境搭建
本文介绍了在VMware虚拟机中配置DPDK(数据平面开发套件)的详细步骤。首先概述了DPDK的核心原理(轮询模式、用户态驱动、大页内存)及其在数据中心、5G核心网等场景的应用价值。然后详细讲解了配置过程:确认网卡信息、添加多块网卡、修改网卡配置、设置2M/1G大页内存、下载DPDK源码并配置环境变量。最后通过dpdk-setup.sh脚本完成编译环境配置、内核模块加载及网卡绑定。文中提供了多个关键命令和配置截图,并附有相关参考链接,帮助读者顺利完成DPDK环境搭建。
2025-12-01 21:34:24
1302
原创 协程设计原理与实现
摘要:协程是一种用户态轻量级线程,解决了传统多进程/线程模型在高并发场景下的性能瓶颈和编程复杂性。协程实现基于三个核心原语操作:create()、yield()和resume()。有三种实现方式:1)setjmp/longjmp方式简单但功能有限;2)ucontext方式功能完整但已被废弃;3)汇编方式性能最优但实现复杂。协程需要管理就绪、睡眠和等待三种状态,分别使用队列和红黑树等数据结构组织。协程结构体包含上下文环境、回调函数、参数、栈空间等成员,实现同步编程风格下的异步执行性能。
2025-11-20 08:59:38
1151
原创 基于 epoll 的 Reactor 模式实现:从原理到百万并发实践
本文深入探讨了基于epoll的Reactor模式实现,从核心原理到百万并发实践。首先剖析了epoll机制的高效原理,包括其红黑树存储结构和O(1)时间复杂度的事件通知机制,并对比了水平触发与边缘触发模式的特点。文章详细介绍了Reactor模式的分层设计,包括事件循环、连接处理和回调机制等核心组件。 重点阐述了实现细节:通过conn结构体优化连接管理,采用函数指针实现灵活回调,并展示了accept、recv、send等关键回调函数的实现逻辑。
2025-11-19 13:53:19
1380
原创 网络io与io多路复用select,poll,epoll
摘要:本文介绍了Linux网络I/O的基础知识,重点分析了套接字(Socket)通信模型和服务端流程,包括socket()创建、bind()绑定、listen()监听、accept()接受连接以及recv()/send()数据传输。文章阐述了TCP套接字与文件描述符(fd)的映射关系,并对比了传统"一请求一线程"模型的优缺点。最后引入I/O多路复用概念,概述了select、poll和epoll三种机制的特点和性能差异,为后续深入讲解select函数实现原理奠定基础。
2025-11-18 14:56:15
1308
原创 使用VirtualBox安装20.04ubuntu(server)虚拟机
本文详细介绍了在VirtualBox中安装Ubuntu 20.04 LTS Server的过程。主要内容包括:1)VirtualBox和Ubuntu镜像的下载;2)虚拟机创建和参数配置;3)系统安装步骤及网络设置;4)将NAT模式改为桥接网卡并配置静态IP;5)SSH远程连接配置。通过本教程,读者可以在本地快速搭建一个可远程访问的Linux开发环境,适用于网络编程、服务器开发等场景。文中特别强调了静态IP配置的重要性,并提供了详细的网络配置方法。
2025-11-17 13:00:21
2077
原创 Makefile 入门使用与深入解析(超详细!!!)
文章摘要: 本文详细介绍了Makefile的基本使用与核心概念(超详细!!)包括其自动化编译管理、依赖关系处理等核心功能。Makefile通过定义目标(target)、依赖(prerequisites)和命令(recipe)实现高效构建,支持伪目标(.PHONY)避免文件冲突。文章以C语言项目为例,演示了Makefile的基本结构、编译流程(依赖图构建、时间戳检查、命令执行),并强调了跨平台、增量编译等工程化优势。关键点包括:Tab缩进规则、变量简化重复输入、默认目标机制及clean等常见伪目标的使用场景。
2025-09-29 00:41:52
871
原创 在LuBancat 1 上安装Miniconda(保姆级别指南,同样适用其他Linux 系统)
本文提供了在LuBancat 1(及其他Linux系统)上安装Miniconda的详细指南(保姆级指南)。首先介绍了系统架构识别方法,强调下载对应架构版本的重要性。然后讲解了Conda和Miniconda的区别,推荐使用轻量级的Miniconda。安装步骤包括:下载脚本、赋予权限、选择安装路径、配置环境变量等。最后列举了常用conda命令,涵盖环境管理、包管理等功能。该指南特别适合ARM架构设备用户,能帮助快速搭建Python开发环境。
2025-09-26 17:34:46
1134
原创 git 学习
Git基础与高级使用摘要 本文介绍了Git版本控制工具的基础和高级使用方法。基础部分包括:初始化设置用户名邮箱、创建仓库、四个工作区域(工作区/暂存区/本地仓库/远程仓库)和三种文件状态(已修改/已暂存/已提交)。高级功能涵盖:主流GUI工具(GitKraken/GitHub Desktop等)、分支管理(创建/切换/合并)、版本回滚(reset/reflog)以及远程仓库操作。特别说明了add和commit的区别,commit会生成可回溯的版本号,而reset命令可通过--hard/--soft/--mi
2025-09-20 15:27:34
693
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅