基本概念 文件描述符fd Linux 系统中,把一切都看做是文件,当进程打开现有文件或创建新文件时,内核向进程返回一个文件描述符,文件描述符就是内核为了高效管理已被打开的文件所创建的索引,用来指向被打开的文件,所有执行I/O操作的系统调用都会通过文件描述符。 常见文件类型 普通文件:包含任意数据 目录:包含一组链接(link)的文件 套接字(socket):用来与另一个进程进行跨网络通信的文件 命名通道 符号链接 支付和块设备 linux抽象了一组标准接口,叫unix I/O,使得所有的输入和输出都能以一种统一的方…

2022/01/03 0条评论 852点热度 0人点赞 阅读全文

c中的引用 之前了解c的时候,简单的看过,但是在阅读c源码的时候会突然出现这种。 #一个sds字符串+一个长度,是啥玩意?read(fd, c->querybuf+qblen, readlen); c中有两种引用->和.。 先看下-> ->是指向结构体成员运算符 ->所指向的是结构体或对象的首地址 ->的用处是使用一个指向,以便访问结构体或对象其内成员 看下. .是断点符号,不属于运算符 .所指向的是结构体或对象 .的用处是使用一个指向以便访问结构体或对象 噢,了解了,query…

2022/01/02 0条评论 813点热度 0人点赞 阅读全文

今天在拿U盘拷贝一个东西,发现了16年的一个工作笔记。我记得我是11月17日入职,入职以后就开始处理各种问题。简单的扫描了一眼,发现了一些问题,当时作为核心开发,视界还是不够宽。 1,一直在处理问题,遇到一个处理一个,并没有沉淀成知识推广出去; 2,缺少培养人的思维; 3,缺少规范流程; 4,当时没有就那些问题进行深入研究; 那个时候是真拼,除了保证自己有很高效率,还处理了这么多组内的问题,不过也是因为那两年的积累,才能在后来形成各种的规范和checklist。 时间 问题 备注 2015/11/18 修改协议空指…

2021/12/30 0条评论 807点热度 0人点赞 阅读全文

在hystrix中核心使用了响应式编程。不了解响应式编程的同学可能会看的云里雾里。 基本概念 官网上对rx的描述。 ReactiveX is a library for composing asynchronous and event-based programs by using observable sequences. It extends the observer pattern to support sequences of data and/or events and adds operators th…

2021/12/29 0条评论 871点热度 0人点赞 阅读全文

推文502 背景 前几周,运营做营销活动推文,推文后,我们我们没有收到任何的系统报警。业务反馈,用户进不去页面,有的还报502。what? 抓紧时间排查。 cpu 正常 网络链接正常(单机ng的有效链接1000,单机流量200mb) 链路请求正常(10分钟内超过2秒的接口不到1000条,大部分还都是银行卡相关的) 数据库也正常 都正常啊,怎么就502了?看下ng的超时日志,最近10分钟内,单机也就几百个,不应该怎么慢啊。 不对,突然想起来在打开后端系统的有点卡顿。 难道是网络带宽耗尽了? 马上找运维看了下公网带宽,…

2021/12/26 0条评论 857点热度 0人点赞 阅读全文

最近遇到了一些生产问题涉及到了hystrix,想要了解下底层的原理。hystrix中大量运用了Rxjava的响应式编程,不懂Rxjava,理解起来有点费劲。 基本准备 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchem…

2021/12/25 0条评论 985点热度 0人点赞 阅读全文

在之前的redis源码阅读三-终于把主线任务执行搞明白了和redis源码阅读五-为什么大量过期key会阻塞redis?梳理了redis的整体处理流程和redis的定期清理。都没有说到redis的过期策略。这次我来探究一下。 我们都知道redis的缓存淘汰策略有以下几种: noeviction 无过期策略,内存满了就直接异常 volatile-lru 对有过期时间的key进行lru淘汰(越长时间没有被访问,越容易被淘汰) allkeys-lru 对全局的key按LRU进行淘汰(越长时间没有被访问,越容易被淘汰) vo…

2021/12/24 0条评论 873点热度 0人点赞 阅读全文

在之前的 redis的key过期了还能取出来?,在这里对key的过期策略进行了简单的分析,惰性过期和定期过期,对定期清理这块讲的并不透彻,这次来根据源码分析下。 先上下逻辑,此逻辑图根据redis官方5.0分支梳理。 定期过期-慢循环 在redis源码阅读二-终于把redis的启动流程搞明白了这一文中。 我们知道redis启动会注册一个Time Event 事件,里面的执行逻辑是:serverCron 在server.c中,其中databaseCron()函数中会调用慢循环进行过期key清理。 int server…

2021/12/20 0条评论 865点热度 0人点赞 阅读全文

之前分析了通过redis源码阅读二-终于把redis的启动流程搞明白了分析了redis的启动流程,通过redis源码阅读三-终于把主线任务执行搞明白了分析了redis的主线任务,这次从redis6.2分支上分析redis6的io多线程。 我注释的代码主要在redis5.0分支上。6.2上注释的比较少。 https://github.com/yxkong/redis/tree/6.2 https://github.com/yxkong/redis/tree/5.0 acceptTcpHandler处理的差异 虽然最终…

2021/12/16 0条评论 918点热度 0人点赞 阅读全文

在redis源码阅读二-终于把redis的启动流程搞明白了 介绍redis的启动流程,也画了一张图。今天我来详细讲解下redis的主线任务是怎么执行的。 我们先看一下流程图 在redis的主线任务里,主要有三大块: eventLoop->beforesleep 创建回调的写事件并绑定处理器sendReplyToClient,在handleClientsWithPendingWrites aeProcessEvents 执行整主流程,主要功能 从epoll读取fd,将读取的数据写入server.clients …

2021/12/14 0条评论 790点热度 0人点赞 阅读全文
1234532