01-开篇:授人以鱼不若授人以渔 —— Redis 可以用来做什么?
课程
1
开篇:授人以鱼不若授人以渔 —— Redis 可以用来做什么?
学习时长: 5分21秒
2
基础:万丈高楼平地起 —— Redis 基础数据结构
上次学到
学习时长: 16分14秒
3
应用 1:千帆竞发 —— 分布式锁
学习时长: 7分47秒
4
应用 2:缓兵之计 —— 延时队列
学习时长: 8分9秒
5
应用 3:节衣缩食 —— 位图
学习时长: 8分52秒
6
应用 4:四两拨千斤 —— HyperLogLog
学习时长: 14分17秒
7
应用 5:层峦叠嶂 —— 布隆过滤器
学习时长: 17分54秒
8
应用 6:断尾求生 —— 简单限流
学习时长: 4分37秒
9
应用 7:一毛不拔 —— 漏斗限流
学习时长: 7分22秒
10
应用 8:近水楼台 —— GeoHash
学习时长: 7分52秒
11
应用 9:大海捞针 —— Scan
学习时长: 8分42秒
12
原理 1:鞭辟入里 —— 线程 IO 模型
学习时长: 4分1秒
13
原理 2:交头接耳 —— 通信协议
学习时长: 3分34秒
14
原理 3:未雨绸缪 —— 持久化
学习时长: 5分27秒
15
原理 4:雷厉风行 —— 管道
学习时长: 3分51秒
16
原理 5:同舟共济 —— 事务
学习时长: 6分36秒
17
原理 6:小道消息 —— PubSub
学习时长: 7分7秒
18
原理 7:开源节流 —— 小对象压缩
学习时长: 7分14秒
19
原理 8:有备无患 —— 主从同步
学习时长: 4分9秒
20
集群 1:李代桃僵 —— Sentinel
学习时长: 3分52秒
21
集群 2:分而治之 —— Codis
学习时长: 7分28秒
22
集群 3:众志成城 —— Cluster
学习时长: 8分38秒
23
拓展 1:耳听八方 —— Stream
学习时长: 13分40秒
24
拓展 2:无所不知 —— Info 指令
学习时长: 4分4秒
25
拓展 3:拾遗补漏 —— 再谈分布式锁
学习时长: 2分18秒
26
拓展 4:朝生暮死 —— 过期策略
学习时长: 2分21秒
27
拓展 5:优胜劣汰 —— LRU
学习时长: 4分34秒
28
拓展 6:平波缓进 —— 懒惰删除
学习时长: 2分13秒
29
拓展 7:妙手仁心 —— 优雅地使用 Jedis
学习时长: 6分35秒
30
拓展 8:居安思危 —— 保护 Redis
学习时长: 2分19秒
31
拓展 9:隔墙有耳 —— Redis 安全通信
学习时长: 6分34秒
32
拓展 10:法力无边 —— Redis Lua 脚本执行原理
学习时长: 9分24秒
33
拓展 11:短小精悍 —— 命令行工具的妙用
学习时长: 9分21秒
34
源码 1:丝分缕析 —— 探索「字符串」内部
学习时长: 5分20秒
35
源码 2:循序渐进 —— 探索「字典」内部
学习时长: 7分24秒
36
源码 3:挨肩迭背 —— 探索「压缩列表」内部
学习时长: 10分42秒
37
源码 4:风驰电掣 —— 探索「快速列表」内部
学习时长: 3分49秒
38
源码 5:凌波微步 —— 探索「跳跃列表」内部
学习时长: 9分57秒
39
源码 6:破旧立新 —— 探索「紧凑列表」内部
学习时长: 2分42秒
40
源码 7:金枝玉叶 —— 探索「基数树」内部
学习时长: 5分36秒
41
源码 8:精益求精 —— LFU vs LRU
学习时长: 8分4秒
42
源码 9:如履薄冰 —— 懒惰删除的巨大牺牲
学习时长: 9分53秒
43
源码 10:跋山涉水 —— 深入字典遍历
学习时长: 9分24秒
44
源码 11:见缝插针 —— 探索 HyperLogLog 内部
学习时长: 13分3秒
45
尾声:百尺竿头 —— 继续深造指南
学习时长: 2分32秒
juejin_logo copyCreated with Sketch.

开篇:授人以鱼不若授人以渔 —— Redis 可以用来做什么?

Redis 是互联网技术领域使用最为广泛的存储中间件,它是「Remote Dictionary Service」的首字母缩写,也就是「远程字典服务」。Redis 以其超高的性能、完美的文档、简洁易懂的源码和丰富的客户端库支持在开源中间件领域广受好评。国内外很多大型互联网公司都在使用 Redis,比如 Twitter、YouPorn、暴雪娱乐、Github、StackOverflow、腾讯、阿里、京东、华为、新浪微博等等,很多中小型公司也都有应用。也可以说,对 Redis 的了解和应用实践已成为当下中高级后端开发者绕不开的必备技能。

由 Redis 面试想到的

在面试后端工程师 Redis 技能的时候,面试官通常问的第一个问题就是“Redis 能用来做什么?”,第一个回答往往都会是「缓存」。缓存确实是 Redis 使用最多的领域,它相比 Memcache 而言更加易于理解、使用和控制。

可是如果再进一步问“还有呢?”,大多数同学就会开始皱眉头,只有一小部分人会回答「分布式锁」。如果你就分布式锁再深入问下去,他们基本就会开始摇头:我们项目里面 Redis 的锁方法都是别人(应该是架构师)封装好的,拿过来直接使用,内部细节没有去了解过,也没有必要了解。

对类似的场景,我深有体会。因为关于 Redis 的面试题,之前准备了很多,但是真正能用上的却很少。当面试的同学频繁地回复「不知道、没用过」的时候,再继续深入追问已经毫无意义,这时候就需要切换话题了。偶尔遇上几个能持续很多回合的同学,他们总能使人眼前一亮。如果再拓展一下周边知识点,就会发现这些人往往也会有所涉猎,这时我在心中已经暗暗地对这位同学伸出了大拇指。

这样的面试经历事后也让我深刻反思:架构师的技能很高,对提升团队研发效率很有帮助,我们非常钦佩和羡慕。但是普通开发者如果习惯于在架构师封装好的东西之上,只专注于做业务开发,那久而久之,在技术理解和成长上就会变得迟钝甚至麻木。从这个角度看,架构师也可能成为普通开发者的“敌人”,他的强大能力会让大家变成“温室的花朵”,一旦遇到环境变化就会不知所措。

其实很多业务场景,如果仅仅是会使用某项技术、框架,那是再简单不过了。但随着业务发展,系统的用户量、并发量涨上来之后,现有系统的问题就会层出不穷地暴露出来。如果不能深入地了解系统、技术和框架背后的深层原理,很多问题根本无法理解到本质,更谈不上解决,临时抱佛脚也于事无补。

所谓「授人以鱼不若授人以渔」,本小册的初衷和目标就是帮助后端开发者较为深入的理解 Redis 背后的原理和实践经验,做到知其然也知其所以然,为未来进阶成长为架构师做好准备。

小册的内容范围

本小册主要讲解笔者从实战中摸索总结的 Redis 最常用最核心知识点,但限于篇幅和精力,并没有涵盖 Redis 全部的内容知识点,比如 Redis 内置的 Lua 脚本引擎就完全没有提到。之所以不讲,是因为在平时的工作中确实从来没有使用过,它就好比关系数据库的存储过程,虽然功能很强大,但是确实很少使用,而且也不易维护,所以就不推荐读者使用了。

对于很多小企业来说,本小册的很多内容都是用不上的,因为系统的并发量没有到一定的量级,这些高级功能根本没必要使用。不过机会总是留给那些有准备的孩子们,如果突然有一天流量涨上来了,Redis 的这些稀有的高级功能势必能立即派上用场。

读者们肯定也注意到,小册所有的标题都有使用特定的成语来描述。这些成语不是随便写的,而是精确考量了成语的含义和技术点的相关性精心挑选出来的,相信读者在理解了每个小节的内容之后,肯定可以明白内容和成语含义的相关性。之所以要使用成语也是为了制造悬念,吸引读者探究为什么这个技术点会和这个成语相关。老钱的语文水平不高,在选择成语时,反复使用了搜索引擎。如果读者找到了更贴切的成语,一定要即时在评论区留言告知。如果被采纳,会考虑福利反馈。😄

好了,深入理解 Redis 的学习之旅正式开始。

Redis 可以做什么?

Redis的业务应用范围非常广泛,让我们以掘金技术社区(juejin.cn)的帖子模块为实例,梳理一下,Redis 可以用在哪些地方?

  1. 记录帖子的点赞数、评论数和点击数 (hash)。
  2. 记录用户的帖子 ID 列表 (排序),便于快速显示用户的帖子列表 (zset)。
  3. 记录帖子的标题、摘要、作者和封面信息,用于列表页展示 (hash)。
  4. 记录帖子的点赞用户 ID 列表,评论 ID 列表,用于显示和去重计数 (zset)。
  5. 缓存近期热帖内容 (帖子内容空间占用比较大),减少数据库压力 (hash)。
  6. 记录帖子的相关文章 ID,根据内容推荐相关帖子 (list)。
  7. 如果帖子 ID 是整数自增的,可以使用 Redis 来分配帖子 ID(计数器)。
  8. 收藏集和帖子之间的关系 (zset)。
  9. 记录热榜帖子 ID 列表,总热榜和分类热榜 (zset)。
  10. 缓存用户行为历史,进行恶意行为过滤 (zset,hash)。

当然,实际情况下需求可能也没这么多,因为在请求压力不大的情况下,很多数据都是可以直接从数据库中查询的。但请求压力一大,以前通过数据库直接存取的数据则必须要挪到缓存里来。

以上提到的只是 Redis 的基础应用,也是日常开发中最常见的应用(如果你的 Redis 基础和经验不足,可能需要阅读完下一节之后才能回过头来思考这个问题)。除了基础应用之外,还有很多其它的 Redis 高级应用,大多数同学可能从未接触过,这部分我会在后续的章节中陆续讲解。

小结

接下来,我们将过一遍 Redis 的基础知识,这部分内容估计本小册大多数读者都已经非常了解,所以这里也不浪费太多笔墨,只计划用一节的篇幅快速讲完。如果读者对 Redis 基础数据结构已经了然于胸,可以直接跳到下一章节阅读 Redis 的高级知识。

另,在阅读小册过程中,如果你被某些章节卡住了,一下理解不了,可以先淡定的摸着胸口告诉自己“不要慌,一切都是正常的!”,然后临时跳过并继续阅读后面的章节。但请各位读者务必坚持到最后,相信你会明显感受到技术能力的升华。大家加油!⛽️

扩展阅读

1. 《天下无难试之 Redis 面试题刁难大全》

这篇文章是老钱之前就 Redis 面试总结的一篇原创分享,供大家参考阅读,这篇文章也被 IT 技术圈大号「高可用架构」转载。

2. 《Redis 作者 Antirez 其人趣事:为什么 Redis 的默认端口是 6379?》

Redis 由意大利人 Salvatore Sanfilippo(网名 Antirez) 开发,上图是他的个人照片。Antirez 不仅帅的不像实力派,也非常有趣。他出生在非英语系国家,英语能力长期以来是一个短板,他曾经专门为自己蹩脚的英语能力写过一篇博文《英语伤痛 15 年》,用自己的成长经历来鼓励那些非英语系的技术开发者们努力攻克英语难关。

我们都知道 Redis 的默认端口是 6379,这个端口号也不是随机选的,而是由手机键盘字母「MERZ」的位置决定的。「MERZ」在 Antirez 的朋友圈语言中是「愚蠢」的代名词,它源于意大利广告女郎「Alessia Merz」在电视节目上说了一堆愚蠢的话,想到这里我不禁开始感觉到 Antirez 的朋友圈似乎有那么点猥琐。😏

Antirez 今年已经四十岁了,依旧在孜孜不倦地写代码,为 Redis 的开源事业持续贡献力量。


下面两篇文章是老钱在翻阅了 Redis 作者 Antirez 的早期博客之后,挑了几个有趣的故事做了翻译,也分享给广大读者们。

3. 《我为 Redis 找到了一个新家—— VMWare》

4. 《Redis 作者 Antirez 经历的「性别歧视」风波》

留言
Ctrl + Enter
全部评论(242)
BinK_1783的头像
删除
努力变好不是为例让所有人喜欢你,是为了让自己更喜欢自己
点赞
回复
只求一夜的头像
删除
菠菜
就这?百度出来的都比这里面的水货内容多,详细。
5
1
删除
害 花了钱了 就看看呗
点赞
回复
用户8701419214113的头像
删除
不要买不要买不要买,水的一比水的一比水的一比
3
回复
张金魁的头像
删除
很早之前就购买了,没有感觉到有删减的感觉呀,内容也很不错,
点赞
回复
用户4768990723754的头像
删除
真的水😠😠😠
1
回复
z在掘金110833的头像
删除
不建议购买,这个册子之前内容比现在丰富,但是在作者出书后反而删减了很多。出书在书中增加内容可以理解,但是删减小册内容就太恶心了,很多好评是几年以前,后来购买的读者反馈都很差,大家谨慎购买!
6
3
删除
我去投诉了,怎么能删除内容
点赞
回复
删除
啊,不会吧,这也太难受了,我刚买。。。
点赞
回复
查看更多回复
轰隆轰隆雷的头像
删除
两年前这水平就能卖钱了?还了卖2w多册?我错了 跟不得风,提醒下我自己,以此为戒
2
回复
用户8619834020692的头像
删除
扫码加群,一个多星期了,都没人理,太郁闷了..🙄🙄🙄
点赞
回复
你是你所想,而非你想的头像
删除
目录很全,内容很水。水不代表作者水平不行,有可能没全身心投入写作;
5
回复
拥与抱久的头像
删除
妈的刚买的,听到前面的评论心态炸了,我问一下,极客时间的redis可以吗?
点赞
2
删除
都不错,各有所长,真想学的,都可以买了。
点赞
回复
删除
不用看前面的评论,直接往后面翻自己去看看就知道了。而且你可以看下说差,内容不好的人的用户信息。别被带了节奏。
点赞
回复
焦糖的头像
删除
确实敷衍,没有细节,不建议买。可能直接百度比他讲的会更细一些
2
回复
coding for the world的头像
删除
别买,特别烂,作者枉为技术人
点赞
1
删除
相当坑,估计是湿垃圾,一点干货都没有
1
回复
用户3033610643300的头像
删除
打卡
点赞
回复
豫中小达摩的头像
删除
打卡
点赞
回复
wandore的头像
删除
打卡
点赞
回复
zhiwei123的头像
删除
水的很,什么东西啊,浪费时间
点赞
回复
Youthlql的头像
删除
掘金小册,目前我看过mysql那本,和redis这本。跟楼下说的差不多,我也不是什么黑子。《Mysqls是怎样运行的:从跟上理解mysql》这本小册,讲的是真的很清楚,强烈推荐这本,讲的也很深入,看完之后会觉得融会贯通的感觉。redis这本小册,我只能说讲的浅不浅,深不深的,个人非常不建议买。后面的内容太水了,还有很多错误,评论区纠正了错误,作者也不改。
12
回复
zlyj的头像
删除
买了就后悔了,后面越来越水,掘金小册只有mysql那本都是干货,花大精力写的。
14
1
删除
我也感觉mysql那本是最好的,不过这本也不是非常差吧,只是跟那本的相比差了不少。
点赞
回复
小鹿Java的头像
删除
Java技术经理 @ 你猜
用的哪个版本的redis
点赞
回复
zyfsuzy的头像
删除
研发工程师 @ 百度
mark
点赞
回复

查看全部 242 条回复