专栏首页程序员的成长之路【162期】一些Redis面试题及分布式集群面试考点整理

【162期】一些Redis面试题及分布式集群面试考点整理

来自:网络

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内存进行优化的

高可用分布式集群

一,什么是分布式

要理解分布式系统,主要需要明白一下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中是如何实现分布式锁的?

<END>

本文分享自微信公众号 - 程序员的成长之路(cxydczzl),作者:戳一戳→

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-03-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Redis面试题及分布式集群

    Java高级架构
  • 常见的Redis面试题及分布式集群讲解

    Tanyboye
  • 面试题十一期-MongoDB分布式集群环境搭建

    小黄鸡今日推荐>>>MongoDB篇 diligence redeems stupidity

    测试小兵
  • Redis面试高频45题笔记:基础+缓存雪崩+哨兵+集群+Reids学习笔记

    欢迎关注专栏:Java架构技术进阶。里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦。

    慕容千语
  • 三面滴滴失败,总结了Java面试题,有几个题还是一直搞不懂

    这是我在工作、面试中学习并总结到的一些知识点,都是一些比较典型的、面试常常被问到的问题。如果你平时没有注意去总结的话,那么当你面试被问到的时候可能会是一脸懵圈,...

    Java程序猿
  • spring-session实现分布式集群session的共享

      HttpSession是通过Servlet容器创建和管理的,像Tomcat/Jetty都是保存在内存中的。但是我们把应用搭建成分布式的集群,然后利用LVS或...

    青石路
  • 2019 腾讯java面试 (含面试题解析)

    本人3年开发经验、18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴、今日头条、滴滴等公司offer,岗位是Java后端开发,最终选择去了阿里巴巴。

    木有bug
  • 2020预备春招BAT面试题汇总:MyBatis +微服务+多线程+Spring+分布式

    本文收集整理了各大厂常见面试题N道,你想要的这里都有内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcac...

    架构师修行之路
  • 2020最常见的200+Java面试题汇总(含答案解析)

    2020年快要结束了,很多朋友问题,有没有整理今年的一些面试题,最近抽时间整理了一份Java面试题。或许这份面试题还不足以囊括所有 Java 问题,但有了它,我...

    程序员追风

扫码关注云+社区

领取腾讯云代金券