基础编程学习快乐每一天
首页
留言
Siddim.com
当前位置:
首页
>
编程知识库
>
后端开发知识
>
一些Redis面试题及分布式集群面试考点整理
一些Redis面试题及分布式集群面试考点整理
阅读
1
2020-09-06
:
001
期~
150
期汇总,方便阅读,不断更新中.....
1. 使用Redis有哪些好处?
(
1
) 速度快,因为数据存在内存中,类似于
HashMap
,
HashMap
的优势就是查找和操作的时间复杂度都是
O
(
1
)
(
2
) 支持丰富数据类型,支持
string
,
list
,
set
,
sorted
set
,
hash
(
3
) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
(
4
) 丰富的特性:可用于缓存,消息,按
key
设置过期时间,过期后将会自动删除
2. redis相比memcached有哪些优势?
(
1
)
memcached
所有的值均是简单的字符串,
redis
作为其替代者,支持更为丰富的数据类型
(
2
)
redis
的速度比
memcached
快很多
(
3
)
redis
可以持久化其数据
3. MySQL里有1000w数据,redis中只存10w的数据,如何保证redis中的数据都是热点数据
相关知识:
redis
内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。
redis
提供
6
种数据淘汰策略:
voltile
-
lru
:从已设置过期时间的数据集(
server
.
db
[
i
].
expires
)中挑选最近最少使用的数据淘汰
volatile
-
ttl
:从已设置过期时间的数据集(
server
.
db
[
i
].
expires
)中挑选将要过期的数据淘汰
volatile
-
random
:从已设置过期时间的数据集(
server
.
db
[
i
].
expires
)中任意选择数据淘汰
allkeys
-
lru
:从数据集(
server
.
db
[
i
].
dict
)中挑选最近最少使用的数据淘汰
allkeys
-
random
:从数据集(
server
.
db
[
i
].
dict
)中任意选择数据淘汰
no
-
enviction
(驱逐):禁止驱逐数据
4. Memcache与Redis的区别都有哪些?
1)、存储方式
Memecache
把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。
Redis
有部份存在硬盘上,这样能保证数据的持久性。
2)、数据支持类型
Memcache
对数据类型支持相对简单。
Redis
有复杂的数据类型。
3)、使用底层模型不同
它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。
Redis
直接自己构建了
VM
机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
4)、value大小
redis
最大可以达到
1GB
,而
memcache
只有
1MB
5. Redis的各项功能解决了哪些问题?
参考:【
150
期】面试官:
Redis
的各项功能解决了哪些问题?
6. redis 两种持久化的优缺点
【
159
期】面试官:你来说说
Redis
两种持久化方式的优缺点
7. redis 线上连接超时处理思路
【
95
期】面试官:你遇到
Redis
线上连接超时一般如何处理?
7. 如何对Redis内存进行优化
【
94
期】面试官:熟悉
Redis
吗,项目中你是如何对
Redis
内存进行优化的
高可用分布式集群 <br/>
一,什么是分布式
要理解分布式系统,主要需要明白一下
2
个方面:
分布式系统一定是由多个节点组成的系统。
其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的。
这些连通的节点上部署了我们的节点,并且相互的操作会有协同。
分布式系统对于用户而言,他们面对的就是一个服务器,提供用户需要的服务而已。而实际上这些服务是通过背后的众多服务器组成的一个分布式系统。因此分布式系统看起来像是一个超级计算机一样。
例如淘宝,平时大家都会使用,它本身就是一个分布式系统。我们通过浏览器访问淘宝网站时,这个请求的背后就是一个庞大的分布式系统在为我们提供服务,整个系统中有的负责请求处理,有的负责存储,有的负责计算,最终他们相互协调把最后的结果返回并呈现给用户。
使用分布式系统主要有特点:
1
、增大系统容量。我们的业务量越来越大,而要能应对越来越大的业务量,一台机器的性能已经无法满足了,我们需要多台机器才能应对大规模的应用场景。所以,我们需要垂直或是水平拆分业务系统,让其变成一个分布式的架构。
2
、加强系统可用。我们的业务越来越关键,需要提高整个系统架构的可用性,这就意味着架构中不能存在单点故障。这样,整个系统不会因为一台机器出故障而导致整体不可用。所以,需要通过分布式架构来冗余系统以消除单点故障,从而提高系统的可用性。
3
、因为模块化,所以系统模块重用度更高。
4
、因为软件服务模块被拆分,开发和发布速度可以并行而变得更快。
5
、系统扩展性更高。
6
、团队协作流程也会得到改善。
分布式系统的类型有三种:
1
、分布式处理,但只有一个总数据库,没有局部数据库。
2
、分层式处理,每一层都有自己的数据库。
3
、充分分散的分布式网络,没有中央控制部分,各节点之间的联系方式又可以有多种,如松散的联接,紧密的联接,动态的联接,广播通知式的联接等。
二,高可用
高可用(
High
Availability
),是当一台服务器停止服务后,对于业务及用户毫无影响。停止服务的原因可能由于网卡、路由器、机房、
CPU
负载过高、内存溢出、自然灾害等不可预期的原因导致,在很多时候也称单点问题。
(1)解决单点问题主要有2种方式:
主备方式
这种通常是一台主机、一台或多台备机,在正常情况下主机对外提供服务,并把数据同步到备机,当主机宕机后,备机立刻开始服务。
Redis
HA
中使用比较多的是
keepalived
,它使主机备机对外提供同一个虚拟
IP
,客户端通过虚拟
IP
进行数据操作,正常期间主机一直对外提供服务,宕机后
VIP
自动漂移到备机上。
优点是对客户端毫无影响,仍然通过
VIP
操作。
缺点也很明显,在绝大多数时间内备机是一直没使用,被浪费着的。
主从方式
这种采取一主多从的办法,主从之间进行数据同步。当
Master
宕机后,通过选举算法(
Paxos
、
Raft
)从
slave
中选举出新
Master
继续对外提供服务,主机恢复后以
slave
的身份重新加入。
主从另一个目的是进行读写分离,这是当单机读写压力过高的一种通用型解决方案。其主机的角色只提供写操作或少量的读,把多余读请求通过负载均衡算法分流到单个或多个
slave
服务器上。
缺点是主机宕机后,
Slave
虽然被选举成新
Master
了,但对外提供的
IP
服务地址却发生变化了,意味着会影响到客户端。解决这种情况需要一些额外的工作,在当主机地址发生变化后及时通知到客户端,客户端收到新地址后,使用新地址继续发送新请求。
(2)数据同步
无论是主备还是主从都牵扯到数据同步的问题,这也分
2
种情况:
同步方式: 当主机收到客户端写操作后,以同步方式把数据同步到从机上,当从机也成功写入后,主机才返回给客户端成功,也称数据强一致性。很显然这种方式性能会降低不少,当从机很多时,可以不用每台都同步,主机同步某一台从机后,从机再把数据分发同步到其他从机上,这样提高主机性能分担同步压力。在
redis
中是支持这杨配置的,一台
master
,一台
slave
,同时这台
salve
又作为其他
slave
的
master
。
异步方式: 主机接收到写操作后,直接返回成功,然后在后台用异步方式把数据同步到从机上。这种同步性能比较好,但无法保证数据的完整性,比如在异步同步过程中主机突然宕机了,也称这种方式为数据弱一致性。
Redis
主从同步采用的是异步方式,因此会有少量丢数据的危险。还有种弱一致性的特例叫最终一致性,这块详细内容可参见
CAP
原理及一致性模型。
(3)方案选择
keepalived
方案配置简单、人力成本小,在数据量少、压力小的情况下推荐使用。如果数据量比较大,不希望过多浪费机器,还希望在宕机后,做一些自定义的措施,比如报警、记日志、数据迁移等操作,推荐使用主从方式,因为和主从搭配的一般还有个管理监控中心。
宕机通知这块,可以集成到客户端组件上,也可单独抽离出来。
Redis
官方
Sentinel
支持故障自动转移、通知等,详情见低成本高可用方案设计(四)。
逻辑图:
三,Redis分布式锁如何解决锁超时问题
【
110
期】面试官:
Redis
分布式锁如何解决锁超时问题?
四,Redis实现分布式锁的几种常见方式
【
07
期】
Redis
中是如何实现分布式锁的?
? ~
以上数据来源于网络,如有侵权,请联系删除。
上一篇:
面试不愁,给你一份SpringBoot常用注解
下一篇:
面试官:你能谈谈数据库实现缓存最终一致性的一些方法吗?
评论
(0)
提交
类别
基础编程学习
HTML
PHP
Python
编程知识库
后端开发知识
热门文章
Java并发中的同步容器与并发容器,你了解多少?
Innodb中的事务隔离级别和锁的关系,难倒一半面试者!
SpringBoot + minio实现分片上传、秒传、续传
面试官:你知道消息队列如何保证数据不丢失吗?
JAVA知识 Java8新特性
面试官:谈谈为什么要限流,有哪些限流方案?
说说动态代理与静态代理区别
面试官:思考Tomcat 类加载器为什么要违背双亲委派模型?
boot-admin 基于SpringBoot的后台权限管理系统,可作为脚手架,用于快速搭建项目
SpringBoot+Vue+App+硬件实现智能家居系统项目