摘要: 二、内核如何与用户进程协作 //创建Socket的c语言程序 ... int main(){ int sk = socket(PF_INET, SOCK_STREAM, 0); //忽略bind和accept ... } 2.1 读取视角:Linux socket 结构 2.1.1 socket源码 阅读全文
posted @ 2024-10-05 11:02 Nammonco 阅读(19) 评论(0) 推荐(0)
摘要: LRU(最近最久未使用) 适用于:局部突发流量场景,实现简单 缺点: 对短发周期性(短发冷数据)的数据没有抵抗力,容易缓存污染。比如某些缓存长期稳定地被查询,但是突发的数据访问会导致这些缓存被移除,而突发数据未来不再使用,这就造成缓存污染。 改进的算法有LRU-K、TwoQueues LFU(最近很 阅读全文
posted @ 2025-05-17 11:50 Nammonco 阅读(41) 评论(0) 推荐(0)
摘要: Redis Zset由哈希表和跳表构成。哈希表记录了member与score的映射,可以快速查询member的score;跳表有序存储元素,用于范围查询。 跳表的实现原理 跳表简单来说是一个多层链表。Redis的跳表有一个链表组成,每个节点内部包含元素值、score、后退指针和level数组,lev 阅读全文
posted @ 2025-05-15 21:29 Nammonco 阅读(87) 评论(0) 推荐(0)
摘要: MySQL发生死锁时 自动检测与回滚 MySQL自带死锁监测机制,检测到死锁后,自动回滚另外一个事务(通常是拥有资源少的那个)。 手动kill被阻塞的事务 寻找产生死锁的事务: # 返回一对数据(信号量、事务、IO、死锁日志等) SHOW ENGINE INNODB STATUS 或者: SELEC 阅读全文
posted @ 2025-03-13 17:00 Nammonco 阅读(39) 评论(0) 推荐(0)
摘要: 死锁 两个或多个进程因为资源竞争导致相互等待的情况称为死锁。 死锁的发生条件(缺一不可) 持有并等待 互斥 不可抢占 循环等待 互斥、不可抢占都是独占锁的特征。互斥即一个资源只能被一个线程占用。不可抢占即资源被释放前不可再被抢占。 持有并等待、循环等待则是进程的行为特征。持有并等待:进程已经持有一个 阅读全文
posted @ 2025-03-13 16:20 Nammonco 阅读(22) 评论(0) 推荐(0)
摘要: Semaphore源码解读 注意,阅读本文需要了解AQS,AQS采用了模板设计模式。后续本人会完善这篇文章 Semaphore的方法 acquire() 阻塞获得一个许可,会阻塞,直到得到一个可用许可或被中断 重载版本 acquire(n) :尝试获取n个许可 acquireUninterrupti 阅读全文
posted @ 2024-10-10 10:07 Nammonco 阅读(50) 评论(0) 推荐(0)
摘要: 二、内核如何与用户进程协作 //创建Socket的c语言程序 ... int main(){ int sk = socket(PF_INET, SOCK_STREAM, 0); //忽略bind和accept ... } 2.1 读取视角:Linux socket 结构 2.1.1 socket源码 阅读全文
posted @ 2024-10-10 10:07 Nammonco 阅读(179) 评论(0) 推荐(0)
摘要: 核心问题 每秒上万次请求 数据一致性(超买超买复购) 响应速度(用户反馈) 每秒上万次请求的后果 短时间内,上万个数据库连接同时达到,数据库崩溃。数据库处理大量请求,如果一个IO耗时100ms,大量的请求冲进数据库,响应速度将十分缓慢。 限流策略 通常秒杀商品数量远远小于参与用户,而且用户在秒杀时, 阅读全文
posted @ 2024-04-11 16:45 Nammonco 阅读(21) 评论(0) 推荐(0)