阅读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条评论 893点热度 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条评论 1103点热度 0人点赞 阅读全文

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

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

生成脚手架 随着新框架的不断稳定(同时也带来了不错的收益),新的项目以及重构项目不断的往新框架上切,基于这个原因,要把新框架整一个脚手架。 脚手架中包含了demo(为了学习而框架,实际开发中会有一些便利性的调整) 注意事项 依赖maven环境,必须配置MVAVA_HOME 依赖jdk环境(一定要jdk,不要jre) maven-archetype 的模板使用velocity 引入插件以及自定义配置文件 先找一个可以跑起来的demo,在pom文件中引入脚手架的maven plugin 我的工程结构如下: 项目地址:h…

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

创建eureka-server项目 主要看下配置文件 server: port: 8765 # 开启优雅停机kill -2 可以优雅停机 shutdown: GRACEFUL eureka: #此处设置会改变eureka控制台System Status的显示 datacenter: cloud #此处设置会改变eureka控制台System Status的显示 environment: dev instance: appname: eureka-server lease-renewal-interval-in-se…

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

什么是docker-compose? docker-compose是docker的容器编排工具。通过配置yml文件来compose 我们开发过程中所需要的服务。 ps: 虽然生产上大部分用的是k8s,但是我们自己开发的时候,可以用docker-compose 来快速的起服务,用什么起什么,极其方便。(至于安装,在这里不做过多的讲解) 先看下实例 docker-compose-mysql.yml version: '3' #基于compose哪个版本定制,1已经废弃,目前2和3 services:…

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

环境设置 c程序的源文件通常使用扩展名.c c程序需要编译成机器语言,这样cpu可以按给定指令执行程序。 最常用的编译器是gcc(mac上xcode就可以) 程序结构 #include 预处理器指令,类似于import,主要用于告诉编译器,我们要引入什么。 .h 结尾的是头文件,头文件中一般是定义的结构体和变量 #include 引入头文件,告诉c编译器编译之前要引入stdio.h文件,在linux中去/usr/include目录中寻找 函数 变量 语句&表达式 注释 以/.../包裹的会被编译器忽略 #i…

2021/11/17 0条评论 1010点热度 0人点赞 阅读全文

机器数 一个数在计算机中的二进制表示形式,就是这个数的机器数。 二进制显示 高位存放符号,正数是0,负数是1 位运算法符 与运算符 & 两个位都为1则为1,否则为0 printFormat(101); printFormat(-101); printFormat(101&101); 结果: 0000 0000 0000 0000 0000 0000 0110 0101 1111 1111 1111 1111 1111 1111 1001 1011 0000 0000 0000 0000 0000 0…

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

java代码是怎么运行的? jvm具体是怎么运行java字节码的? 在HotSpot里,有两种编译形式, 一种是解释执行,逐条将字节码翻译成机器码并执行。(无需等待编译) 一种是即时编译(Just in Time compilation)JIT ,将一个方法中包含的字节码编译成机器码再执行。(运行速度快) HotSpot 默认采用混合模式,综合了两者的优点。先解释执行字节码,将其中反复执行的热点代码,以方法为单位进行即时编译。 即时编译器: C1 又叫Client编译器,面向的是对启动性能有要求的或执行时间较短的,…

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

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

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