学习一个技术,通常只接触了零散的技术点,没有在脑海里建立一个完整的知识框架和架构体系,没有系统观。这样会很吃力,而且会出现一看好像自己会,过后就忘记,一脸懵逼。
系统观其实是至关重要的,从某种程度上说,在解决问题时,拥有了系统观,就意味着你能有依据、有章法地定位和解决问题。
Redis 全景图
全景图可以围绕两个纬度展开,分别是:
应用纬度:缓存使用、集群运用、数据结构的巧妙使用
系统纬度:可以归类为三高
- 高性能:线程模型、网络 IO 模型、数据结构、持久化机制;
- 高可用:主从复制、哨兵集群、Cluster 分片集群;
- 高拓展:负载均衡
Redis 系列篇章围绕如下思维导图展开,这次从 《Redis 唯快不破的秘密》一起探索 Redis 的核心知识点。
唯快不破的秘密
65 哥前段时间去面试 996 大厂,被问到「Redis 为什么快?」
“ 65 哥:额,因为它是基于内存实现和单线程模型 ”
面试官:还有呢?
“ 65 哥:没了呀。 ”
很多人仅仅只是知道基于内存实现,其他核心的原因模棱两可。今日跟着小编一起探索真正快的原因,做一个唯快不破的真男人!
Redis 为了高性能,从各方各面都进行了优化,下次小伙伴们面试的时候,面试官问 Redis 性能为什么如此高,可不能傻傻地只说单线程和内存存储了。
根据官方数据,Redis 的 QPS 可以达到约 100000(每秒请求数),有兴趣的可以参考官方的基准程序测试《How fast is Redis?》,地址:https://redis.io/topics/benchmarks
横轴是连接数,纵轴是 QPS。此时,这张图反映了一个数量级,希望大家在面试的时候可以正确地描述出来,不要问你的时候,你回答的数量级相差甚远!
完全基于内存实现
“ 65 哥:这个我知道,Redis 是基于内存的数据库,跟磁盘数据库相比,完全吊打磁盘的速度,就像段誉的凌波微步。对于磁盘数据库来说,首先要将数据通过 IO 操作读取到内存里。 ”
没错,不论读写操作都是在内存上完成的,我们分别对比下内存操作与磁盘操作的差异。
磁盘调用栈图
内存操作
内存直接由 CPU 控制,也就是 CPU 内部集成的内存控制器,所以说内存是直接与 CPU 对接,享受与 CPU 通信的最优带宽。
Redis 将数据存储在内存中,读写操作不会因为磁盘的 IO 速度限制,所以速度飞一般的感觉!
最后以一张图量化系统的各种延时时间(部分数据引用 Brendan Gregg