首页 > 数据库 >互联网公司面试必问的Redis题目

互联网公司面试必问的Redis题目

时间:2023-06-11 10:34:09浏览次数:59  
标签:必问 name Redis 面试 缓存 key 服务器 节点


互联网公司面试必问的Redis题目_Redis

作为一个后端开发人员,在面试的时候,Redis是必问的,那么下面咱们来把Redis一般面试常问问题汇总一下。介绍

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API的非关系型数据库。

A=原子性(Atomicity)

C=一致性(Consistency)

I=隔离性(Isolation)

D=持久性(Durability)

Consistency(一致性), 数据一致更新,所有数据变动都是同步的Availability(可用性), 好的响应性能Partition tolerance(分区容忍性) 可靠性(强一致性和弱一致性)

https://github.com/antirez/redishttps://redis.io/

Redis支持的数据类型?

 

  • String字符串: set key valueHash(哈希/散列)hmset name key1 value1 key2 value2
  • List(列表) lpush name valuerpush name valuelrem name index llen name
  • Set(集合)sadd name value
  • zset(sorted set:有序集合) zadd name score value

什么是Redis持久化?Redis有哪几种持久化方式?优缺点是什么?

 


 Redis有哪些架构模式?讲讲各自的特点

单机版模式

互联网公司面试必问的Redis题目_服务器_02

特点:简单问题:

  • 内存容量有限 
  • 处理能力有限 
  • 无法高可用。
     

主从复制模式

互联网公司面试必问的Redis题目_Redis_03

Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品,其中被复制的服务器为主服务器(master),而通过复制创建出来的服务器复制品则为从服务器(slave)。 只要主从服务器之间的网络连接正常,主从服务器两者会具有相同的数据,主服务器就会一直将发生在自己身上的数据更新同步 给从服务器,从而一直保证主从服务器的数据相同。特点:

  1. master/slave 角色
  2. master/slave 数据相同
  3. 降低 master 读压力在转交从库

问题:

  1. 无法保证高可用
  2. 没有解决 master 写的压力

 哨兵模式

互联网公司面试必问的Redis题目_Redis_04

Redis sentinel 是一个分布式系统中监控 redis 主从服务器,并在主服务器下线时自动进行故障转移。其中三个特性:

  • 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
  • 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  • 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作。

特点

  1. 保证高可用
  2. 监控各个节点
  3. 自动故障迁移

缺点

  • 主从模式
  • 切换需要时间丢数据
  • 没有解决 master 写的压力

集群(proxy)模式

互联网公司面试必问的Redis题目_Redis_05

Twemproxy 是一个 Twitter 开源的一个 redis 和 memcache 快速/轻量级代理服务器; Twemproxy 是一个快速的单线程代理程序,支持 Memcached ASCII 协议和 redis 协议。

特点:

  1. 多种 hash 算法:MD5、CRC16、CRC32、CRC32a、hsieh、murmur、Jenkins
  2. 支持失败节点自动删除
  3. 后端 Sharding 分片逻辑对业务透明,业务方的读写方式和操作单个 Redis 一致

缺点:

  1. 增加了新的 proxy,需要维护其高可用。
  2. failover 逻辑需要自己实现,其本身不能支持故障的自动转移可扩展性差,进行扩缩容都需要手动干预

集群(直连型)模式

互联网公司面试必问的Redis题目_Redis_06

从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。

特点

  1. 无中心架构(不存在哪个节点影响性能瓶颈),少了 proxy 层。
  2. 数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布。
  3. 可扩展性,可线性扩展到 1000 个节点,节点可动态添加或删除。
  4. 高可用性,部分节点不可用时,集群仍可用。通过增加 Slave 做备份数据副本
  5. 实现故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave到 Master的角色提升。

缺点

  1. 资源隔离性较差,容易出现相互影响的情况。
  2. 数据通过异步复制,不保证数据的强一致性

 

互联网公司面试必问的Redis题目_缓存_07

什么是一致性哈希算法?什么是哈希槽?

这里参考下面两篇文章:

 

CAP到底是什么东东?能不能说说

参考:

http://www.ruanyifeng.com/blog/2018/07/cap.html

使用Redis怎么实现分布式事务锁?有了解过?

参考:

什么是缓存穿透?如何避免? 缓存穿透一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。如何避免?1:对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。2:对一定不存在的key进行过滤。可以把所有的可能存在的key放到一个大的Bitmap中,查询时通过该bitmap过滤。

什么是缓存雪崩?何如避免? 

缓存雪崩如何避免?

1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。

 

Redis为什么采用单线程的?Redis为什么会这么快?


标签:必问,name,Redis,面试,缓存,key,服务器,节点
From: https://blog.51cto.com/u_11702014/6457117

相关文章

  • 200场面试总结的诀窍,都说好用!
    大家好,我是田哥这段时间忙得飞起,天天忙于学习,忙于模拟面试,忙于和大家聊面试相关的内容。从各位老铁的反馈来看,今年找工作本来就不容易,加上最近两年受到疫情影响,很多公司都在裁员,哎。先不说内卷吧,咱们还是多找找自身问题。古话说的:不打无准备的仗。所以面试前一定要准备,再去面试。面......
  • 面试官:在项目中,你是如何使用线程池的?
    大家好,我是田哥前两天,有位星友(知识星球里的朋友简称)私信我,问在项目中如何使用线程池,关于线程池的原理和八股文相关的都可以背,但是要是问到你们项目中是怎么用的,心里总是有点慌。公众号里回复77,获取面试小抄和面试相关资源:话不多说,我们直接步入正题。创建线程池的方式我在这篇文章......
  • C++面试八股文:struct、class和union有哪些区别?
    C++面试八股文:struct、class和union有哪些区别?某日小二参加XXX科技公司的C++工程师开发岗位5面:面试官:struct和class有什么区别?小二:在C++中,struct和class的唯一区别是默认的访问控制。struct默认的成员是public的,而class的默认成员是private的。面试官:struct、class和unio......
  • Redis安装与启动(Linux)
    安装Redis依赖yuminstall-ygcctcl上传安装包并解压redis.io下载安装包,上传到/usr/local/src目录解压tar-zxvfredis-6.2.6.tat.gz解压成功 进入安装目录,运行编译命令cdredis-6.2-6/make&&makeinstall默认的安装路径在/usr/local/bin下默认启动(不友好......
  • TVM面试题
    1、TVM中的调度器(Scheduler)是什么?请简要解释TVM调度器的作用和工作原理。TVM中的调度器(Scheduler)是负责将计算图映射到特定硬件目标上的组件。调度器在TVM中起着关键的作用,它决定了计算图的执行方式、并行化策略以及内存布局等,以优化计算性能和资源利用。TVM调度器的主要作用包......
  • #yyds干货盘点# LeetCode程序员面试金典:环形链表
    题目:给你一个链表的头节点head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。注意:pos不作为参数进行传递 。仅仅是为了标识链......
  • #yyds干货盘点# LeetCode程序员面试金典:移除链表元素
    1.简述:给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val==val的节点,并返回新的头节点。 示例1:输入:head=[1,2,6,3,4,5,6],val=6输出:[1,2,3,4,5]示例2:输入:head=[],val=1输出:[]示例3:输入:head=[7,7,7,7],val=7输出:[]2.代码实现:class......
  • redis 面试
    为什么快 1。纯内存存储,io多路复用技术(非阻塞io使用epoll作为io多路复用技术的实现,加上redis自身的事件处理模型,将epoll中的连接读写关闭都转换为事件,不在网咯io上面浪费) 单线程架构大key 存放的时候根据业务判断可以例如一个大对象拆分为多个小的然后用哈希存储,还......
  • MLIR面试题
    1、请简要解释MLIR的概念和用途,并说明MLIR在编译器领域中的重要性。MLIR(Multi-LevelIntermediateRepresentation)是一种多级中间表示语言,提供灵活、可扩展和可优化的编译器基础设施。MLIR的主要目标是为不同的编程语言、领域专用语言(DSL)和编译器优化提供统一的中间表示框架。ML......
  • Redis数据结构:高频面试题及解析
    概述Redis是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。Redis支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能......