# 虚惊一场,差点挂在
美团三面,罪魁祸首居然竟是“Re
dis”?
在找工作的过程中,对于 Re
dis 技术知识的掌握已经成为必须的技能。
美团面试常常就会被问到Re
dis相关知识,而这次我就差点挂在了
美团3面,面试官连问我以下几个Re
dis的问题,然后就卡壳了...
1. re
dis了解吗?Re
dis key 的过期策略Re
dis了解吗?你说说怎么用re
dis实现分布式锁?
2. Re
dis常用数据结构及底层数据结构实现
3. 如何
解决 Re
dis 的并发竞争 Key 问题
4. 如何保证缓存与
数据库双写时的数据一致性?
5. Re
dis 持久化有哪几种方式,怎么选?
6. Re
dis 的 zset 怎么实现的?
7. Re
dis 主从同步是怎样的过程?
8. ... ...(剩下的不太记得了...为此面试完回来针Re
dis专门做了
一个大总结)

# 01 Re
dis面试问题常见划分(6个部分,附带完整的答案解析)
> 第一部分:Re
dis 的概念理解
> 第二部分:Re
dis 数据结构与指令
> 第三部分:Re
dis 高并发处理策略
> 第四部分:Re
dis 集群结构以及设计理念
> 第五部分:Re
dis 缓存管理与持久化机制
> 第六部分:Re
dis 应用场景设计
>
> 注意:前面例举了所有的问题,在先不看解析的条件下,可先自行试水。。解析在最后。。
> 笔记是全程手写出来的,希望大家拿到笔记后别丢进收藏夹吃灰!
## 1.1 Re
dis面试问题:第一部分:Re
dis 的概念理解
1. 什么是 Re
dis?
2. Re
dis 的特点有哪些?
3. Memcache 与 Re
dis 的区别都有哪些?
4. Re
dis 相比 Memcached 有哪些优势?
5. 如何实现本地缓存?请描述一下你知道的方式
6. Re
dis 通讯协议是什么?有什么特点?
## 1.2 Re
dis面试问题:第二部分:Re
dis 数据结构与指令

1. Re
dis 支持的数据类型
2. Re
dis 常用的命令有哪些?
3.
一个字符串类型的值能存储最大容量是多少?
4. Re
dis 各个数据类型最大存储量分别是多少?
5. 请介绍一下 Re
dis 的数据类型 SortedSet(zset)以及底层实现机制?
6. Re
dis 事务相关命令有哪些?
7. 什么是 Re
dis 事务?原理是什么?
8. Re
dis 事务的注意点有哪些?
9. Re
dis 为什么
不支持回滚?
10. 请介绍一下 Re
dis 的 Pipeline(管道),以及使用场景
11. 请说明一下 Re
dis 的批量命令与 Pipeline 有什么不同?
12. 请介绍一下 Re
dis 的发布
订阅功能
13. Re
dis 的链表数据结构的特征有哪些?
14. 请介绍一下 Re
dis 的 String 类型底层实现?
15. Re
dis 的 String 类型使用 SSD 方式实现的好处?
16. 设置键的生存时间和过期时间有哪些命令?
## 1.3 Re
dis面试问题:第二部分:第三部分:Re
dis 高并发处理策略
1. 为什么 Re
dis 需要把所有数据放到内存中?
2. Re
dis 是单线程的吗?
3. Re
dis 为什么设计成单线程的?
4. 什么是缓存穿透?怎么
解决?
5. 什么是缓存雪崩? 怎么
解决?
6. 缓存的更新策略有几种?分别有什么注意事项?
7. 请介绍几个可能导致 Re
dis 阻塞的原因
8. 怎么去发现 Re
dis 阻塞异常情况?
## 1.4 Re
dis面试问题:第二部分:第四部分:Re
dis 集群结构以及设计理念

1. Re
dis 集群架构模式有哪几种?
2. Re
dis 集群最大节点个数是多少?
3. Re
dis 集群的主从复制模型是怎样的?
4. 请介绍一下 Re
dis 集群实现方案
5. Re
dis 集群会有写操作丢失吗?为什么?
6. Re
dis 慢
查询是什么?通过什么配置?
7. Re
dis 的慢
查询修复经验有哪些?怎么修复的?
8. 如何优化 Re
dis 服务的
性能?
9. Re
dis 的主从复制模式有什么优缺点?
10. Re
dis sentinel(哨兵)模式优缺点有哪些?
11. 如何设置 Re
dis 的最大连接数?查看 Re
dis 的最大连接数?查看 Re
dis 的当前
12. 介绍一些 Re
dis 常用的安全设置?
## 1.5 Re
dis面试问题:第二部分:第五部分:Re
dis 缓存管理与持久化机制

1. Re
dis 持久化机制有哪些?
2. Re
dis 持久化机制 AOF 和 RDB 有哪些不同之处?
3. 请介绍一下 RDB 持久化机制的优缺点
4. 请介绍一下 AOF 持久化机制的优缺点
5. 如果 AOF
文件的数据出现异常, Re
dis 服务怎么处理?
6. 常见的淘汰算法有哪些?
7. Re
dis 淘汰策略有哪些?
8. Re
dis 缓存失效策略有哪些?
9. Re
dis 如何做内存优化?
10. 什么是 bigkey? 有什么影响?
11. 怎么发现 bigkey?
12. Re
dis 的内存消耗
分类有哪些?内存
统计使用什么命令?
13. 简单介绍一下 Re
dis 的内存管理方式有哪些?
14. 如何设置 Re
dis 的内存上限?有什么作用?
15. Re
dis 报内存不足怎么处理?
## 1.6 Re
dis面试问题:第六部分:Re
dis 应用场景设计
1. Re
dis 适用场景有哪些?
2. Re
dis 常用的业务场景有哪些?
3. Re
dis 支持的 Java 客户端有哪些? 简单说明一下特点。
4. 请简单描述一下 Je
dis 的基本使用
方法?
5. Je
dis 连接池
链接方法有什么优点?
6. 什么是分布式锁?有什么作用?
7. 分布式锁可以通过什么来实现?
8. 介绍一下分布式锁实现需要注意的事项?
9. Re
dis 怎么实现分布式锁?
10. 缓存命中率表示什么?
11. 怎么提高缓存命中率?
12. 请介绍一下 Spring 注解缓存
总共是从Re
dis的概念理解、数据结构与指令、高并发处理策略、集群结构以及设计理念、缓存管理与持久化机制、应用场景设计等六大部分整理了以上的70高频问,答案解析总共是有25页(如下图所示),篇幅有限没法全部在
文章中写上(后面还有手写笔记等),但是可以
分享给需要的朋友


# 02 一份纯手写的Re
dis笔记
> 这是从朋友那里拿过来的,看了之后感觉还是挺不错的。整个笔记分为五个部分: 第一部分:Re
dis基础篇 第二部分:Re
dis数据结构篇 第三部分:Re
dis持久化篇 第四部分:Re
dis集群篇 第五部分:Re
dis的其他问题
## 2.1 第一部分:Re
dis基础篇
* 什么是Re
dis ?mRe
dis优缺点
* 为什么要用缓存?为什么使用Re
dis?
* 使用缓存会出现什么问题?
* Re
dis为什么早期版本选择单线程?
* Re
dis为什么这么快?

## 2.2 第二部分:Re
dis数据结构篇
* Re
dis常用数据结构及实现?
* Re
dis 的 SDS 和C中字符串相比的优势?
* 字典是如何实现的? Rehash了解吗?
* 跳跃表是如何实现的?原理?
* HyperLogLog有了解吗?
* 布隆过滤器有了解吗?
* GeoHash了解吗?
* 压缩列表了解吗?
*
快速列表quicklist了解吗?
* Stream结构有了解吗?

## 2.3 第三部分:Re
dis持久化篇
* 什么是持久化?
* Re
dis中的两种持久化方式?
* RDB和AOF各自有什么优缺点?
* 两种方式如何选择?
* Re
dis 的数据恢复

## 2.4 第四部分:Re
dis集群篇
*
主从同步了解吗?
* 哨兵模式了解吗?
* Re
dis集群使用过吗?原理?
* 集群中数据如何分区?
* 节点之
间的通信机制了解吗?
* 集群数据如何存储的有了解吗?

## 2.5 第五部分:Re
dis的其他问题
* Re
dis 如何实现分布式锁?
* Re
dis过期键的
删除策略?
* Re
dis的淘汰策略有哪些?
* Re
dis常见
性能问题和
解决方案?

# 03 Re
dis进阶必看:《Re
dis实战》+《Re
dis设计与实现》
## 3.1 《Re
dis实战》
深入浅出地介绍了Re
dis的5种数据类型,并通过多个实用示例展示了Re
dis用法。除此之外,还讲述了Re
dis 的优化
方法以及扩展
方法,对于学习和使用Re
dis来说不可多得的参考笔记。

本笔记一共由三个部分组成:
第一部分 入门:对Re
dis进行了介绍,说明了Re
dis 的基本使用
方法、它拥有的5种数据结构以及操作这5种数据结构的命令,并讲解了如何使用Re
dis去构建
文章聚合网站、cookie、购物车、网页缓存、
数据库行缓存等一系列程序;
* 第1章 初识Re
dis
* 第2章 使用Re
dis构建Web应用
第二部分 核心概念: 对Re
dis命令进行了更详细的介绍,并展示了如何使用Re
dis去构建更为复杂的辅助工具和应用程序,并在最后展示了如何使用Re
dis去构建
一个简单的社交网站;
* 第3章 Re
dis命令
* 第4章 数据安全与
性能保障
* 第5章 使用Re
dis构建
支持程序
* 第6章 使用Re
dis构建应用程序组件
* 第7章 基于
搜索的应用程序
* 第8章 构建简单的社交网站
第三部分 进阶
内容:对Re
dis用户经常会遇到的一些问题进行了介绍,讲解了降低Re
dis内存占用的
方法、扩展Re
dis性能的
方法以及使用Lua语言进行脚本编程的
方法;
* 第9章 降低内存占用
* 第10章 扩展Re
dis
* 第11章 Re
dis的Lua脚本编程


##
# 最后
分享一波我的面试宝典——一线互联网大厂Java核心面试题库
**以下是我个人的一些做法,希望可以给各位提供一些帮助:**
> **[点击《一线互联网大厂Java核心面试题库》即可免费领取](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)**,整理了很长一段时间,拿来复习面试刷题非常合适,其中
包括了Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Re
dis、
数据库、中间件MQ、
dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且还会持续的更新...可star一下!

**283页的Java进阶核心pdf文档**
> Java部分:Java基础,集合,并发,多线程,JVM,设计模式
>
> 数据结构算法:Java算法,数据结构
>
> 开源框架部分:Spring,MyBatis,MVC,netty,tomcat
>
> 分布式部分:架构设计,Re
dis缓存,Zookeeper,kafka,RabbitMQ,
负载均衡等
>
> 微服务部分:SpringBoot,SpringCloud,
dubbo,Docker

**还有源码相关的阅读学习**

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。