<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Z2460986913的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Z2460986913</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Z2460986913]]></copyright><item><title><![CDATA[如何设计一个高性能的短链设计]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/148212713</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/148212713</guid><author>Z2460986913</author><pubDate>Sun, 25 May 2025 19:49:03 +0800</pubDate><description><![CDATA[短链接（Short URL）是通过算法将长 URL 压缩成简短字符串的技术方案。例如将缩短为，用户点击短链时会自动重定向到原始长链接。其核心价值在于通过空间压缩和统一管理解决长链接在传播中的实际问题。哈希算法方案ID 自增方案短链长度固定长度（取决于哈希值进制）随 ID 增长可能变长冲突处理依赖哈希算法与数据库 / 布隆过滤器天然无冲突（ID 唯一）并发性能高（无锁计算）需解决 ID 生成器的并发瓶颈重复长链可通过索引实现唯一映射需额外查询逻辑短链设计本质是在空间压缩性能数据唯一性。]]></description><category></category></item><item><title><![CDATA[深入理解 select，poll，epoll：从原理到应用]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147921418</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147921418</guid><author>Z2460986913</author><pubDate>Wed, 14 May 2025 14:38:16 +0800</pubDate><description><![CDATA[从 select 到 poll 再到 epoll，I/O 多路复用机制的演进本质上是。]]></description><category></category></item><item><title><![CDATA[MYSQL 的缓存策略（四）]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147903131</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147903131</guid><author>Z2460986913</author><pubDate>Tue, 13 May 2025 12:37:28 +0800</pubDate><description><![CDATA[用户直接从。]]></description><category></category></item><item><title><![CDATA[MYSQL事务原理分析（三）]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147880264</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147880264</guid><author>Z2460986913</author><pubDate>Mon, 12 May 2025 18:01:55 +0800</pubDate><description><![CDATA[在数据库多用户高并发访问场景中，多个连接同时操作数据可能导致数据不一致。事务（Transaction）是数据库管理系统提供的一种机制，用于确保一组数据库操作要么全部成功执行，要么全部失败回滚，从而保证数据的完整性和一致性。]]></description><category></category></item><item><title><![CDATA[MySQL索引原理以及SQL优化（二）]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147877378</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147877378</guid><author>Z2460986913</author><pubDate>Sun, 11 May 2025 20:20:55 +0800</pubDate><description><![CDATA[Change Buffer 是 InnoDB 中专门为二级索引的插入、更新、删除操作设置的缓存区域，延迟将二级索引变更写入磁盘，从而减少磁盘 I/O。流程：将索引添加判断推到存储引擎中过滤数据，最终由存储引擎进行数据汇总返回给server层，减少了server层和引擎层的交互次数。索引节点存储主键值而非数据地址，查询时需要先查索引再查主键索引，产生回表操作。所有数据存储在叶子节点，非叶子节点仅存储索引键和指针，支持范围查询和随机访问，适合磁盘存储结构。无唯一性约束的基础索引类型，允许重复值和NULL值。]]></description><category></category></item><item><title><![CDATA[MYSQL语句，索引，视图，存储过程，触发器（一）]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147852599</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147852599</guid><author>Z2460986913</author><pubDate>Sun, 11 May 2025 15:05:39 +0800</pubDate><description><![CDATA[SQL 语句需要先编译然后执行，而存储过程（Stored Procedure）是一组为了完成特定功能的 SQL语句集，经编译后存储在数据库中，用户通过指定存储过程的名字并给定参数（如果该存储过程带有参数）来调用执行它。范式可以避免数据冗余，减少数据库的空间，减小维护数据完整性的麻烦；当数据积累到一定的程度，我们需要对过去发生的事情做一个总结分析时，就需要把过去一段时间内产生的数据拿出来进行统计分析，从中获取我们想要的信息；是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合；]]></description><category></category></item><item><title><![CDATA[Redis 主从同步与对象模型（四）]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147834157</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147834157</guid><author>Z2460986913</author><pubDate>Sat, 10 May 2025 11:00:00 +0800</pubDate><description><![CDATA[fork进程，根据内存数据生成 aof 文件，避免同一个 key 历史冗余，在重写 aof 期间，对 redis 的写操作记录到重写缓存区，当重写 aof 结束后，附加到 aof 文件末尾。通过 fork 子进程，根据内存数据生成 rdb 文件，在rdb持久化期间，对redis 的写操作记录到重写缓冲区，当rdb 持久化结束后，附加到 aof 文件末尾。目的：实现 Redis 故障自动转移。父进程对数据修改，触发写保护中断，从而进行物理内存的复制，父进程的页表指向新的物理内存（谁修改谁指向新的物理内存）]]></description><category></category></item><item><title><![CDATA[Redis 存储原理与数据模型（三）]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147816667</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147816667</guid><author>Z2460986913</author><pubDate>Fri, 09 May 2025 12:35:25 +0800</pubDate><description><![CDATA[hashtable 就是通过 hash 运算的方式来决定字符串放到数组的哪一个槽位，数组的大小根据数据量来进行调整，所以就会涉及到扩容和缩容。当 hashtable 中的元素过多的时候，不能一次性 rehash 到 ht[1] ，这样会长期占用 redis，其他 命令得不到响应，所以需要使用渐进式 rehash；负载因子 = used / size ， used 是数组存储元素的个数，size 是数组的长度；如果负载因子 < 0.1 ，则会发生缩容，缩容的规则是恰好包含 used 的 2的n次方；]]></description><category></category></item><item><title><![CDATA[Redis协议与异步方式（二）]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147786193</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147786193</guid><author>Z2460986913</author><pubDate>Thu, 08 May 2025 14:15:47 +0800</pubDate><description><![CDATA[事务是一个不可分割的工作单位，事务中的操作要么全部成功，要么全部失败；即使事务队列中的某个命令在执行期间出现了错误，整个事务也会继续执行下去，直 到将事务队列中的所有命令都执行完毕为止。hiredis 异步客户端接入自定义的 reactor 事件驱动系统的适配器，核心作用是桥接Redis的异步事件自定义事件循环机制，实现了一套hiredis的IO多路复用抽象接口。事务：用户定义一系列数据库操作，这些操作视为一个完整的逻辑处理工作单元，要么全部执行， 要么全部不执行，是不可分割的工作单元。]]></description><category></category></item><item><title><![CDATA[Redis相关命令详解与原理（一）]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147771140</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147771140</guid><author>Z2460986913</author><pubDate>Wed, 07 May 2025 19:22:48 +0800</pubDate><description><![CDATA[Redis 是Remote Dictionary Server(Redis) 的缩写，是一个使用 C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型的Key-Value数据库，并提供多种语言的API。它是一种 NoSQL（not-only sql，泛指非关系型数据库）的数据库，可以用作数据库、缓存、消息中间件、分布式锁等。返回 key1 有但 key2 没有的元素。]]></description><category></category></item><item><title><![CDATA[纯C协程框架NtyCo]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147605980</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147605980</guid><author>Z2460986913</author><pubDate>Tue, 29 Apr 2025 17:28:00 +0800</pubDate><description><![CDATA[一个协程会有哪些状态呢？如果协程sleep了，那么就是睡眠状态，如果协程刚创建出来，那它肯定是就绪状态，如果协程在等待数据的到来，那就是等待状态。这里这里定义协程的三个运行状态{就绪，睡眠，等待}。新创建的协程，加入就绪集合等待调度io未就绪的协程，加入等待集合等待epoll_wait有sleep操作的协程，加入睡眠集合就绪集合没有设置优先级，所以在就绪集合里面的协程优先级一样，那么就可以用队列来存储，先进先出等待集合就是等待IO准备就绪，这个等待IO是有时间长短的，这里用红黑树来存储。]]></description><category></category></item><item><title><![CDATA[C++高性能日志库spdlog]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147579756</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147579756</guid><author>Z2460986913</author><pubDate>Mon, 28 Apr 2025 14:03:29 +0800</pubDate><description><![CDATA[spdlog是一个高性能的 C++ 日志库，它设计时充分考虑了速度和易用性，具有以下特点高效与快速：Spdlog 专注于提供极致的性能，在大量日志记录场景下也能保持较低的延迟和较高的吞吐量。低内存占用：Spdlog的设计确保了即使在高负载下，它也能保持低内存占用。轻量化设计：Spdlog 是头文件（header-only）库，这意味着用户只需要包含相应的头文件即可开始使用，无需编译链接额外的库文件。跨平台支持。]]></description><category></category></item><item><title><![CDATA[动态库加载函数dlsym]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147410786</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147410786</guid><author>Z2460986913</author><pubDate>Tue, 22 Apr 2025 10:26:36 +0800</pubDate><description><![CDATA[是一个用于动态链接库（Dynamic Linking Library）的函数，它允许程序在运行时获取动态链接库中符号（如函数、变量等）的地址。]]></description><category></category></item><item><title><![CDATA[基于红黑树，时间轮，最小堆的定时器方案]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147294039</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147294039</guid><author>Z2460986913</author><pubDate>Thu, 17 Apr 2025 10:29:38 +0800</pubDate><description><![CDATA[eg：epoll_wait 第四个参数 超时参数如果没有定时器，就会一直等待，直到有延迟任务的出现。]]></description><category></category></item><item><title><![CDATA[用户态网络缓冲区]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147287203</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147287203</guid><author>Z2460986913</author><pubDate>Wed, 16 Apr 2025 22:33:21 +0800</pubDate><description><![CDATA[6.从IP头看上一层协议是tcp还是udp，根据五元组找到socket，并将数据提取出来放到socket的接受缓冲区。3.向下传递依次增加TCP/UDP头部，IP头部，帧头（MAC头部），帧尾（tcp分段，ip分片）2.网卡向CPU发起硬件中断，CPU收到中断请求，根据中断表查找中断处理函数，调用中断处理函数。6.触发网卡发送，发送成功，触发硬件中断，释放sk_buff和ringbuffer内存。5.从帧头取出IP协议，判断是IPv4还是IPv6，去掉帧头，帧尾。3.中断处理函数将屏蔽中断，发起软件中断。]]></description><category></category></item><item><title><![CDATA[无锁队列--知识分享]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147286332</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147286332</guid><author>Z2460986913</author><pubDate>Wed, 16 Apr 2025 21:21:51 +0800</pubDate><description><![CDATA[特点：需要处理多个消费者之间的并发问题，保证多个消费者能够安全地从队列中取出元素。含义：多生产者多消费者队列，意味着有多个线程可以同时向队列中添加元素（生产者），也有多个线程可以同时从队列中取出元素（消费者）。含义：单生产者多消费者队列，只有一个线程可以向队列中添加元素，但是有多个线程可以同时从队列中取出元素。含义：多生产者单消费者队列，多个线程可以同时向队列中添加元素，但只有一个线程可以从队列中取出元素。含义：单生产者单消费者队列，即队列只有一个生产者线程和一个消费者线程。SPSC（单生产者，单消费者）]]></description><category></category></item><item><title><![CDATA[原子操作CAS（Compare-And-Swap）和锁]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147171421</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147171421</guid><author>Z2460986913</author><pubDate>Sun, 13 Apr 2025 10:29:17 +0800</pubDate><description><![CDATA[原子操作指的是在执行过程中不可被中断的操作，该操作要么完整地执行完毕，要么完全不执行，不存在执行到一半的中间状态。在多线程或者多进程环境里，原子操作能够保证在同一时刻仅有一个线程或者进程可以对共享资源进行访问和修改，从而避免数据竞争和不一致的问题。]]></description><category></category></item><item><title><![CDATA[池式结构---内存池]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147168821</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147168821</guid><author>Z2460986913</author><pubDate>Sat, 12 Apr 2025 18:57:06 +0800</pubDate><description><![CDATA[内存池是在程序运行初期，预先从系统申请一块较大连续内存空间的池式结构。负责管理内存空间的分配与回收工作，当程序需要小块内存时，直接从内存池中取出合适的部分交付，而不是频繁向系统请求；当程序释放内存时，内存池将其回收，等待下次再分配，而非立刻归还给系统。减少因频繁系统调用带来的开销，提高内存分配的效率。同时降低内存碎片的产生，因为系统调用分配内存相对耗时，且零散的内存分配易产生碎片，内存池通过集中管理内存，有效解决了这些问题。]]></description><category></category></item><item><title><![CDATA[池式结构--MYSQL连接池]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147112307</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147112307</guid><author>Z2460986913</author><pubDate>Thu, 10 Apr 2025 11:35:32 +0800</pubDate><description><![CDATA[它在系统初始化时创建一定数量的数据库连接对象，并将这些连接维护在一个池中。当应用程序需要与 MySQL 数据库进行交互时，无需重新创建新的连接，而是从连接池中获取一个已有的连接；：连接池可以对连接进行统一管理，当出现连接泄漏（即应用程序获取连接后未正确归还）等问题时，连接池能够进行一定程度的检测和处理，避免因连接问题导致应用程序崩溃，从而提升了应用的稳定性。：通过复用连接池中的连接，避免了重复的连接创建过程，大大缩短了数据库操作的响应时间，在高并发场景下，显著提升了系统的整体性能。]]></description><category></category></item><item><title><![CDATA[池式结构---线程池]]></title><link>https://blog.youkuaiyun.com/Z2460986913/article/details/147038857</link><guid>https://blog.youkuaiyun.com/Z2460986913/article/details/147038857</guid><author>Z2460986913</author><pubDate>Mon, 07 Apr 2025 11:21:47 +0800</pubDate><description><![CDATA[线程池是什么？        简单的说，就是一个管理一定数量线程的池式结构。线程池解决的问题？        解决了异步执行耗时任务（不过度占用核心线程），充分利用多核的特点。线程池如何解决问题的？以生产消费模型                                        生产者（线程）搞清楚原理后，我们就开始手搓线程池了首先，在纯C语言中，我们常常用struct结构体，和callback回调函数进行配合，在c++中引入了函数对象functional和lambda表达式来写线程池  


]]></description><category></category></item></channel></rss>