Redis面试常问总结-图文详解

1.时效性数据

 Redis是一种内存级数据库,所有数据都存放在内存中,内存中的数据可以通过TTL获取其状态。

TTL的返回值存在三种情况:

正数:代表该数据在内存中存活的时间

-1:永久有效地数据

2:已经过期/已经被删除/未被定义的数据

:在Redis中,时效性数据如何存储的?

:如图: 

过期数据是一块独立的存储空间,Hash结构,field的内存地址,value是过期时间,保存了所有key的过期描述。

2.数据删除策略

数据删除策略是针对时效性数据的处理策略,处理的策略有三种:定时删除惰性删除定期删除

定时删除:创建一个定时器,当key设置有过期时间。且时间已经到达过期时间,有定时器立即执行对键的删除操作。

优缺点:可以立即删除过期数据,节约内存空间,但是监控时间的定时器对CPU占用很大

惰性删除:数据到达过期时间我们不做处理,当访问到这个数据时分两种情况:

①若这个数据没有过期,则返回这个数据

②这个数据过期了,则删除这个数据,返回不存在

 优缺点:数据过期没有做任何处理,一旦堆积起来对内存压力极大,但是对CPU占用极小

定期删除:定期删除就是周期性轮询redis库中的时效性数据,采用随机抽取的策略,利用过期数据占比的方式控制删除的频率。简言之:周期性的抽查存储空间(随机抽查,重点抽查)

优点:内存定期随机清理,每秒花固定的CPU资源维护内存

总结:在平时我们一般都是结合定期删除和惰性删除来维护内存

3.数据淘汰策略

数据删除策略是针对过期的时效性数据进行删除的策略,而数据淘汰淘汰策略则解决的是当前内存不足导致的问题,对内存的数据进行清理。

数据删除策略一共是3类8种:

第一类:检测易失数据(可能过期的数据集)

volatile-lru:挑选长时间未使用的数据淘汰

volatile-lfu:挑选最近使用次数最少数据淘汰

volatile-ttl:挑选将要过期的数据淘汰(还未过期的时效性数据)

volatile-random:任意挑选数据删除

第二类:检测全库数据

allkeys-lru:挑选长时间未使用的数据淘汰

allkeLyRs-lfu:挑选最近使用次数最小的数据淘汰

allkeys-random:随机挑选数据淘汰

第三类:放弃数据驱逐(redis默认策略)

no-enviction:禁止驱逐数据(redis4.0中默认策略),会引发OOM(Out Of Memory)

4.主从复制

三高构架:高并发,高性能,高可用

为了避免单点Redis服务器故障,准备多台服务器,互相连通。将数据复制多个副本保存在不同的服务器上,连接在一起,并保证数据是同步的。即使有其中一台服务器宕机,其他服务器依然可以继续提供服务,实现Redis的高可用,同时实现数据冗余备份。

多台服务器连接方案(一主多从):

主从复制:将master中的数据有效及时的复制到slave中

master的职责:

写数据

执行写操作时,将出现变化的数据自动的备份到slave

读数据(可忽略)

slave的职责:

读数据

写数据(禁止)

主从的作用:读写分离、负载均衡、故障恢复、数据冗余、高可用基石

主从复制工作流程 

主从复制过程大体可分为3个阶段:

1.建立连接的过程:

建立连接成功之后:master中保存有slave的端口;slave中保存了master的地址和端口。两者之间建立了连接的socket。

2.数据同步

简言之就是将master中的数据同步到各个slave中

全量复制一般是新的slave连接到master时会执行的操作,将master中的数据全部同步到slave中,在进行全量复制的过程中,master会受到新的操作指令,此时的数据会进入复制缓冲区,当全量复制完成时,就执行复制缓冲区中的数据同步,这个过程就叫做部分复制。

当然这是正常情况下执行的流程,当在进行全量复制的过程中,若正值于流量高峰期,复制缓存区容量被装满,又有新的数据进来时。最先进来的数据会被丢弃,此时offset(偏移量)就发生了变化,当全量复制完成后,发现偏移量发生了变化,就又会进行全量复制防止数据丢失。由此可见:数据同步阶段应避开流量高峰期,避免造成master阻塞,影响业务正常执行

3.命令传播阶段

简言之就是数据的反复同步

5.哨兵模式

哨兵是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障是通过投票机制选择新的master并将所有的slave连接到新的master

哨兵的作用:

监控:监控master和slave,不断检查master和slave是否正常运行,master存活检测,master和slave运行情况检测

通知:当被监控的服务器出现问题时:想其它哨兵/客户端发送通知

自动故障转移:断开master和slave的连接,选取一个slave作为新的master,将其他的slave连接新的master,并且告知客户端新的服务地址

注意:哨兵也是一台redis服务器,只是不提供数据相关服务,通常哨兵的个数为单数

哨兵的工作原理

哨兵在进行主从切换的过程中经历三个阶段:

  • 监控

  • 通知

  • 故障转移

在选取新的master之前:哨兵之间会开一个会,选举一个哨兵来做决定者,每一个哨兵手中都有一票,最后票多者为最后的“赢家”。若最后两个哨兵的票数相同则重新选举。

当获胜的哨兵区去决定新的master的时候也会遵循一个规则:

  • 不在线的OUT

  • 响应慢的OUT

  • 与原master断开时间久的OUT

  • 优先原则   

有关redis一些问题就先列举到这了,还有一个cluster集群的介绍也比较重要。有时间在介绍cluster集群。嘎嘎嘎...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值