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

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

阅读redis的源码永远也绕不过它的启动。我们来看下redis的启动流程。不想看代码可以直接看最后的流程图。 以下源码分析是redis的5.0分支 源码注释:https://github.com/yxkong/redis/commits/5.0 这是启动流程的核心代码。 int main(int argc, char **argv) { //申请空间oom后的处理器 zmalloc_set_oom_handler(redisOutOfMemoryHandler); //哨兵模式 server.sentinel_mo…

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

准备工作 安装visual studio code 下载地址 https://visualstudio.microsoft.com/zh-hans/vs/ fork源码redis源码 https://github.com/redis/redis 下载源码(方便注释) 比如我的 git clone https://github.com/yxkong/redis 使用vs code 打开源码 安装插件 C/C++ C/C++ Extension Pack Better C++ Syntax GitLens — Git …

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

我记得在2016年,2017年的时候,我们使用2.8的集群。当时业务有个需求,要求某个接口一天调用不能超过1000次,当时开发使用一个key: biz:total 来限制。 当时出现的问题是,第二天,接口实际调用量为0,但是从redis里获取到的值还是1000。 当时直接问的阿里云技术支持,反馈这种情况有两种,一种是定期删除,没有达到删除条件,一种是cpu压力过大,不会执行删除策略。 当时也没有深究这个问题,就想了个解决方案,直接把key改为 每天一个的 key: biz20170125:total 来控量,算是解…

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

这可能是最简短的线程池分析文章了。 顶层设计,定义执行接口 Interface Executor(){ void execute(Runnable command); } ExecutorService,定义控制接口 interface ExecutorService extends Executor{ } 抽象实现ExecutorService中的大部分方法 abstract class AbstractExecutorService implements ExecutorService{ //此处把Execut…

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

之前一直用kafka,也了解了kafka的本身的一些机制,包括顺序读、顺序写、零拷贝、分治、水位等。但一直没详细的了解下kafka消费端是如何工作的。 趁着假期分析下,环境如下: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.12.RELEASE</v…

2021/09/20 0条评论 1087点热度 1人点赞 阅读全文

基于springcloud的灰度实现方案(一) 基于springcloud的灰度实现方案(二) @Configuration配置加载分析 之前介绍了灰度方案以及实现,分析feign调用的时候,有点不太尽兴,这次再丰富一下。 首先,我们在feign调用时,使用了FeignClient注解。 #接口调用 @FeignClient("demo-service") public interface DemoServiceFeginClient { } # 开启feign @EnableFeignClie…

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