看了这份阿里 Redis 笔记,以后出去 redis 的问题你随便问
内存数据库 Redis 的相关知识,几乎是大厂的必考题,下面我总结了设计 Redis 的 11 道面试题:
说说 Redis 基本数据类型有哪些吧
Redis 为什么快呢?
那为什么 Redis6.0 之后又改用多线程呢?
知道什么是热 key 吗?热 key 问题怎么解决?
什么是缓存击穿、缓存穿透、缓存雪崩?
Redis 的过期策略有哪些?
那么定期+惰性都没有删除过期的 key 怎么办?
持久化方式有哪些?有什么区别?
怎么实现 Redis 的高可用?
能说说 redis 集群的原理吗?
了解 Redis 事务机制吗?
我们为什么一定要用 Redis 呢?
速度快,完全基于内存,使用 C 语言实现,网络层使用 epoll 解决高并发问题,单线程模型避免了不必要的上下文切换及竞争条件;
注意:单线程仅仅是说在网络请求这一模块上用一个请求处理客户端的请求,像持久化它就会重开一个线程/进程去进行处理
丰富的数据类型,Redis 有 8 种数据类型,当然常用的主要是 String、Hash、List、Set、 SortSet 这 5 种类型,他们都是基于键值的方式组织数据。每一种数据类型提供了非常丰富的操作命令,可以满足绝大部分需求,如果有特殊需求还能自己通过 lua 脚本自己创建新的命令
但是,对于 Redis 的使用,相信还是有很多人不知道如何使用,也有不少中小型企业还没有使用到 Redis,但是现在的大厂要求,对 Redis 的使用是需要熟练并掌握的,因此,学习 Redis 刻不容缓。
今天公开了一份宝藏的技术笔记,由阿里技术专家整理出来的 Redis 技术笔记,下载量已经突破了 30W。现在分享出来,需要的朋友一键三连+评论,然后添加 VX(tkzl6666)即可免费领取
![](https://static001.geekbang.org/infoq/6f/6f28401ae2d765a7cd8f220cd16fdc5e.png)
首先,上一套 Redis 思维脑图
这一套 Redis 的思维脑图还是非常详细具体的,内容比较多,图片展示的是“简约版”,实际上还有更完整的内容,“+”键未展开,Redis 的思维导图能够更好地去帮助我们理解这本笔记的内容,也让我们在学习 Redis 的时候有一个更清晰的思路。
Redis 思维导图内容:
基本数据结构及其应用:字符串+列表+集合+有序集合+哈希
用 Redis 实现分布式锁
持久化:AOF+RDB
如何解决多线程竞争问题
数据库、缓存双写不一致问题
事务
如何保证高可用
哨兵
集群
面试题相关
![](https://static001.geekbang.org/infoq/39/3998f10dd2270cd1a4e4d774744ab321.png)
然后,上正菜:Redis 技术笔记
1.认识 Redis(Redis 简介+Redis 数据结构简介)
![](https://static001.geekbang.org/infoq/66/66d72dc8594b84ef1158bfc67e18863f.png)
2.使用 Redis 构建 Web 应用(登录和 cookie 缓存+使用 Redis 实现购物车+网页缓存+数据行缓存+网页分析)
![](https://static001.geekbang.org/infoq/93/939976e5738311bd90f89d91141c1925.png)
3.Redis 命令(字符串+列表+集合+散列+有序集合+发布与订阅+其他命令)
![](https://static001.geekbang.org/infoq/11/11152e03d00199513c24c4f969400963.png)
4.数据安全与性能保障(持久化选项+复制+处理系统故障+Redis 事务+非事务型流水线+关于性能方面的注意事项)
![](https://static001.geekbang.org/infoq/40/4013f19b40475243b598e6020bc970bb.png)
5.使用 Redis 构建支持程序(使用 Redis 来记录日记+计数器和统计数据+查找 IP 所属城市及国家+服务的发现与配置)
![](https://static001.geekbang.org/infoq/7f/7f321a55e406c021cad578101f16a53d.png)
6.使用 Redis 构建应用程序组件(自动补全+分布式锁+计数信号量+任务队列+消息拉取+使用 Redis 进行文件分发)
![](https://static001.geekbang.org/infoq/5c/5c6a0c7719185b836481fe7d2f2a2ce7.png)
7.基于搜索的应用程序(使用 Redis 进行搜索+有序索引+广告定向+职位搜索)
![](https://static001.geekbang.org/infoq/7b/7b4f5be839b003f2bf38dbf1a6b9f039.png)
8.构建简单的社交网站(用户和状态+主页时间线+关注者列表和正在关注列表+状态消息的发布与删除+流 API)
![](https://static001.geekbang.org/infoq/6e/6e3b33643fde8d44a1623c34d75837f7.png)
9.降低内存占用(短结构+分片结构+打包存储二进制位字节)
![](https://static001.geekbang.org/infoq/cd/cd023aab7b15e3bf65b9edf7d471e4c3.png)
10.扩展 Redis(扩展读性能+扩展写性能和内存容量+扩展复杂的查询)
![](https://static001.geekbang.org/infoq/ef/ef3374e492d80a584d2dee1111433840.png)
11.Redis 的 Lua 脚本编程(在不编写 C 代码的情况下添加新功能+使用 Lua 重写锁和信号量+移除 WATCH/MULTI/EXEC 事务+使用 Lua 对列表进行分片)
![](https://static001.geekbang.org/infoq/bf/bf07634decdd38cdd992291a79d19708.png)
最后,Redis 面试题也要有
1.为什么要用 redis?/为什么要用缓存?
2.为什么要用 redis 而不用 map/guava 做缓存?
3.redis 和 memcached 的区别
4.redis 常见的数据结构以及使用场景分析
5.redis 设置过期时间
6.redis 内存淘汰机制(MySQL 里有 2000w 数据,Redis 中只存 20w 的数据,如何保证 Redis 中的数据库都是热点数据?)
![](https://static001.geekbang.org/infoq/da/daf87452b8d49ecb1f83092ea4f55447.png)
7.redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复?)
8.redis 事务
9.Redis 常见异常及解决方案
10.分布式环境下常见的应用场景
11.Redis 集群模式
12.如何解决 Redis 的并发竞争 Key 问题?
13.如何保证缓存与数据库双写时的数据一致性?
更多 BATJM 等大厂 Redis 面试题(108 道):
![](https://static001.geekbang.org/infoq/4b/4b36f441bdff2db95f98db6ece22bf81.png)
总结
一来,阅读可以提高编程能力。学习都从模仿开始,不管是入门时阅读教程里的示例代码,还是进阶时阅读优秀项目源码,都是很好的学习方式。
二来,阅读可以提高 debug 能力。只有练习积累的阅读代码的能力,才能看懂代码,从而快速准确地定位代码中的问题。
评论 (2 条评论)