前些日子,我信心满满的面试了某大厂的高级后端开发岗位,迎面走来一位干练中年男子,头上真的很亮!!!然后说了句“不好意思,让你久等了”,直接进入正题:看了你的简历,觉得你对redis应该掌握的不错,我们今天就来讨论下redis……”。
Redis是什么?
面试官:你先来说下redis是什么吧
我:(心想:总结下redis的定义和特点,这个简单) Redis是一个由ANSI C语言编写,性能优秀、支持网络、可持久化的K-K内存数据库,并提供多种语言的API。可以用作数据库、缓存、消息中间件等。我顿了一下,接着说:Redis作为一个内存数据库。
- 性能优秀,数据在内存中,读写速度非常快,支持并发10W+ QPS;
- 单进程单线程,是线程安全的,采用IO多路复用机制;
- 丰富的数据类型,支持字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等;
- 支持数据持久化。可以将内存中数据保存在磁盘中,重启时加载;
- 主从复制,哨兵,高可用;
- 可以用作分布式锁;
- 可以作为消息中间件使用,支持发布订阅
面试官:看来是做了一些准备啊,redis作为缓存大家都在用,目前比较主流的解决方案是什么呢?
我:当然是哨兵啊
面试官: 你能说下哨兵的工作原理,以及底层机制么?我:额..... emmm......这个。。
面试官: 小伙子,看来你准备的还不是很充分啊,你这个面试还是比较的危险,这样吧,我推荐你一份Redis的学习文档,你可以回去看看,这份文档从Redis的基础→应用→原理→集群→扩展→源码;可以让你深度掌握Redis的核心原理
image.png
面试自然是GG了,抱着不服输的心态,我回去看了看了这份文档,光是目录就让我心头一颤,竟然还有如此精致的学习文档!在这里做一个分享,以下是部分的文档内容,篇幅原因无法一一展示出来【点击查看】!!!
Redis应用部分:
- 分布式锁
- 延时队列
- 位图
- HyperLogLog
- 布隆过滤器
- 简单限流
- 漏斗限流
- GeoHash
- Scan
Redis原理部分:
- 鞭辟入里 —— 线程 IO 模型
- 通信协议
- 持久化
- 管道
- 事务
- PubSub
- 小对象压缩
- 主从同步
Redis集群:
- Sentinel
- Codis
- Cluster
Redis技术拓展:
- Stream
- Info 指令
- 再谈分布式锁
- 过期策略
- LRU
- 懒惰删除
- 优雅地使用 Jedis
- 保护 Redis
- Redis 安全通信
Redis源码:
- 探索「字符串」内部结构
- 探索「字典」内部
- 探索「压缩列表」内部
- 探索「快速列表」内部
- 探索「跳跃列表」内部结构
- 探索「紧凑列表」内部
- 探索「基数树」内部
image.png
由于文档里的细节内容实在过多所以只编辑了部分知识点的章节粗略的介绍下,每个章节小节点里面都有更细化的内容!