前言

Redis,是互联网技术架构在存储系统中应用最为宽泛的中间件,它也是工程师技术面试中最喜爱问的技能之一,特地是那些优良的、竞争强烈的大型互联网公司(比方 Twitter、新浪微博、阿里云、腾讯云、淘宝、知乎等),通常要求面试者不仅仅把握Redis根底应用,更要求深层了解Redis外部实现的细节原理。毫不夸大地说,能把Redis的知识点全副吃透,你的半只脚就曾经踏进心仪公司的大门!

所以小编给大家整顿了这份《Redis深度历险》文档,并且将从目录,前言,次要内容,这三个局部大家解说这本文档,同时心愿对各位大哥敌人们有点作用,也心愿你们会喜爱!最初,有须要这篇《Redis深度历险》文档的敌人们【间接点击此处】即可获取~

先来看看这份Redis目录:

次要内容

这篇《Redis深度历险:外围原理和利用实际》,次要分为五个局部,为利用篇,原理篇,集群篇,拓展篇,源码篇,所以接下来,小编就每篇认真的开展来具体的为大家解说一下这本书的知识点!

开篇和根底篇

  • 开篇:授人以鱼不如授人以渔——Redis能够用来做什么?
  • 根底:万丈高楼平地起——Redis根底数据结构

开篇

根底

利用篇

  • 利用1:千帆竞发——分布式锁
  • 利用2:金蝉脱壳——延时队列
  • 利用3:省吃俭用——位图
  • 利用4:四两拨千斤—— HyperLogLog
  • 利用5:层峦叠嶂——布隆过滤器
  • 利用6:断尾求生——简略限流
  • 利用7:爱财如命——漏斗限流
  • 利用8:近水楼台——GeoHash
  • 利用9:海底捞针——Scan

局部知识点:

利用1:千帆竞发——分布式锁

利用4:四两拨千斤—— HyperLogLog

这一节咱们能够学会应用HyperLogLog数据结构来进行估数,它十分有价值,能够解决很多精确度不高的统计需要。

利用5:层峦叠嶂——布隆过滤器

利用7∶爱财如命——漏斗限流

漏斗限流是最罕用的限流办法之一,顾名思义,这个算法的灵感源于漏斗(funnel)的构造。

利用8∶近水楼台—— GeoHash

Redis在3.2版本当前减少了地理位置GEO模块,意味着咱们能够应用Redis来实现摩拜单车「左近的Mobike」、美团和饿了么「左近的餐馆」这样的性能了。

原理篇

  • 原理1:鞭辟入里——线程IO模型
  • 原理2:窃窃私语——通信协议
  • 原理3:防患未然——长久化
  • 理4:雷厉风行——管道
  • 原理5:风雨同舟——事务
  • 原理6:小道消息—-PubSub
  • 原理7:开源节流——小对象压缩
  • 原理8:有恃无恐——主从同步

局部知识点:

原理3∶防患未然——长久化

Redis的数据全副在内存里,如果忽然宕机,数据就会全副失落,因而必须有一种机制来保障Redis的数据不会因为故障而失落,这种机制就是Redis的长久化机制。

原理4∶雷厉风行——管道

大家始终以来对Redis管道有一个误会,他们认为这是Redis服务器提供的一种特地的技术,有了这种技术就能够减速Redis的存取效率。然而实际上Redis管道(Pipelinc)自身并不是Redis服务器间接提供的技术,这个技术实质上是由客户端提供的,跟服务器没有什么间接的关系。上面咱们对这块做一个深刻探索。

原理6:小道消息—PubSub

后面咱们讲了 Redis 音讯队列的应用办法,然而没有提到Redis音讯队列的不足之处,那就是它不反对音讯的多提机制。

原理8∶有恃无恐——主从同步

很多企业都没有应用到Redis的集群,然而至多都做了主从。有了主从,当master挂掉的时候,运维让从库过去接管,服务就能够持续,否则master须要通过数据恢复和重启的过程,这就可能会拖很长的工夫,影响线上业务的继续服务。

集群篇

  • 集群1:李代桃僵——Sentinel
  • 集群2:分而治之——Codis
  • 集群3:万众一心——Cluster

局部知识点:

集群2:分而治之——Codis

集群3∶万众一心——Cluster

拓展篇

  • 拓展1:耳听八方——Stream
  • 拓展2:无所不知—— Info指令
  • 拓展3:拾脱漏补——再谈分布式锁
  • 拓震4:朝生暮死——过期策略
  • 拓展5:优胜劣汰——LRU
  • 拓震6:平波缓进———懈怠删除
  • 拓展7:妙手仁心——优雅地应用Jedis
  • 拓展8:居安思危——爱护Redis
  • 拓展9:隔墙有耳——Redis平安通信

局部知识点:

拓展1:耳听八方——Stream

Redis5.0 被作者Antirez忽然放了进去,减少了很多新的特色性能。而Redis5.0最大的新个性就是多出了一个数据结构Stream,它是一个新的弱小的反对多播的可长久化的音讯队列,作者坦言Redis Strcam狠狠地借鉴了Kafka的设计。

拓展3:拾脱漏补——再谈分布式锁

在第三节,咱们粗疏解说了分布式锁的原理,它的应用非常简单,一条指令就能够实现加锁操作。不过在集群环境下,这种形式是有缺点的,它不是相对平安的。

拓展6:平波缓进———懈怠删除

始终以来咱们认为Redis是单线程的,单线程为Redis带来了代码的简洁性和丰盛多样的数据结构。不过Redis 外部实际上并不是只有一个主线程,它还有几个异步线程专门用来解决一些耗时的操作。

拓展9∶隔墙有耳——Redis平安通信

源码篇

  • 源码1:极度深寒——摸索「字符串」内部结构
  • 源码2:极度深寒——摸索「字典」外部
  • 源码3:极度深寒——摸索「压缩列表」外部
  • 源码4:极度深寒——摸索「疾速列表」外部
  • 源码5:极度深寒——摸索「跳跃列表」内部结构
  • 源码6:极度深寒——摸索「紧凑列表」外部
  • 源码7:极度深寒——摸索「基数树」外部

源码1∶极度课寒——探案「字符串」内部结构

Redis中的字符串是能够批改的字符串,在内存中它是以字节数组的模式存在的。咱们晓得C语言外面的字符串规范模式是以NULL作为结束符,然而在Redis外面字符串不是这么示意的。因为要获取NULL结尾的字符串的长度应用的是strlen规范库函数,这个函数的算法复杂度是O(n),它须要对字节数组进行遍历扫描,作为单线程的Redis示意接受不起。

源码3∶极度课寒——摸索「压缩列表」外部

Redis为了节约内存空间应用,set 和hash容器对象在元素个数较少的时候,采纳压缩列表(ziplist)进行存储。压缩列表是一块间断的内存空间,元素之间紧挨着存储,没有任何冗余空隙。

源码5∶极度深寒——探案「跳跃列表」内部结构

Redis的zset是一个复合构造,一方面它须要一个hash构造来存储value和score的对应关系,另一方面须要提供依照seore来排序的性能,还须要可能指定 score的范畴来获取valuc列表的性能,这就须要另外一个构造「跳跃列表」-

源码7∶极度深寒——摸索「甚数树」外部

Rax是Redis外部比拟非凡的一个数据结构,它是一个有序字典树〔基数树RadixTrec),依照key的字典序排列,反对疾速的定位、插入和删除操作。