[TOC] 基础概念 为什么要区分内核空间和用户空间? 早期是不区分内核和用户的,带来的问题是程序可以访问任意内存空间,如果程序不稳定,容易把系统搞崩溃。 后来按cpu指令的重要程度对指令进行了分级,一共4个级别:Ring0~Ring3,linux只使用了Ring0和Ring3两个级别; 用户态使用Ring3级别运行,只访问用户空间,Ring0运行在内核态,可以访问任何程序空间 内核空间 linux系统内核运行的空间 主要提供进程调度、内存分配、连接硬件资源等 用户空间 提供给应用程序的空间 不具备访问内核空间资源…

2022/08/04 0条评论 803点热度 0人点赞 阅读全文

背景 今天群里有个小伙伴问rehash的事。翻看下源码,解密下rehash。 我们小了解下rehash是什么 rehash有两个目的: (扩容)扩容防止hash冲突后,形成链表带来的性能下降,时间复杂度提升(5倍容量后才扩容); (缩容)大量key被回收后,大量的空闲空间,通过rehash节省空间(1/10以下使用量才缩容); redis为了防止大的dict rehash的时候影响性能,使用了渐进式rehash(并不是一下子执行完,而是通过周期性能任务或访问dict的时候执行搬迁) 我们先把redis的数据结构摆上…

2022/03/27 0条评论 970点热度 1人点赞 阅读全文

aof相关配置 aof-rewrite-incremental-fsync yes # aof 开关,默认是关闭的,改为yes表示开启 appendonly no # aof的文件名,默认 appendfilename "appendonly.aof" # aof刷数据的策略,有no/everysec/aways appendfsync everysec no-appendfsync-on-rewrite no # aof超出配置大小的比例,模式是100%,可以理解为阈值 auto-aof-re…

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

这篇文章算是对之前系列的增强,将spring启动流程、@Configuration配置加载分析 、feign构建与调用全流程分析、hystrix源码分析 整体用两张图片串联起来。 feign 全流程分析 图片中主要分为以下几步: 从项目启动; refresh刷新上下文 解析 举例feign的装配,也可以看hystrix的装配(feign通过EnableAutoConfiguration自动装配),hystrix装配(用EnableAutoConfiguration和EnableCircuitBreaker),将Fe…

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

在我计算key个value的空间的时候,发现我使用命令获取的和自己算的总是对不上。比如 命令行执行 local:0>set 5ycode yxkong "OK" local:0>OBJECT ENCODING 5ycode "embstr" local:0>DEBUG OBJECT 5ycode "Value at:0x7f9dc6a0e180 refcount:1 encoding:embstr serializedlength:7 lru:14…

2022/01/08 0条评论 1010点热度 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人点赞 阅读全文

最近遇到了一些生产问题涉及到了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人点赞 阅读全文
12