美文网首页读书
京东二面,Redis为什么这么快?

京东二面,Redis为什么这么快?

作者: 管彤Java架构师 | 来源:发表于2022-05-12 16:52 被阅读0次

面试开始
面试官: 今天聊聊Redis吧面试官 : 都说Redis速度快,那Redis为什么这么快呢?大彬 :主要是因为以下几点原因:

基于内存 :Redis是使用内存存储,没有磁盘IO上的开销。数据存在内存中,读写速度快。
单线程实现 ( Redis 6.0以前):Redis使用单个线程处理请求,避免了多个线程之间线程切换和锁资源争用的开销。
IO多路复用模型 :Redis 采用 IO 多路复用技术。Redis 使用单线程来轮询描述符,将数据库的操作都转换成了事件,不在网络I/O上浪费过多的时间。
高效的数据结构 :Redis 每种数据类型底层都做了优化,目的就是为了追求更快的速度。
面试官: 嗯,刚说到Redis是单线程实现的,你认为Redis为何选择单线程呢?

独白:emm,这得问问Redis作者了...

大彬:1、单线程实现可以避免过多的 上下文切换开销 。程序始终运行在进程中单个线程内,没有多线程切换的场景。

大彬:2、 避免同步机制的开销 :如果 Redis选择多线程模型,需要考虑数据同步的问题,则必然会引入某些同步机制,会导致在操作数据过程中带来更多的开销,增加程序复杂度的同时还会降低性能。

大彬:3、 实现简单,方便维护 :如果 Redis使用多线程模式,那么所有的底层数据结构的设计都必须考虑线程安全问题,那么 Redis 的实现将会变得更加复杂。

面试官: Redis应用场景有哪些?大彬 : 缓存热点数据 ,缓解数据库的压力。

大彬:利用 Redis 原子性的自增操作,可以实现 计数器 的功能,比如统计用户点赞数、用户访问数等。

大彬: 作为简单的消息队列 ,实现异步操作。

大彬: 限速器 ,可用于限制某个用户访问某个接口的频率,比如秒杀场景用于防止用户快速点击带来不必要的压力。

大彬: 好友关系 ,利用集合的一些命令,比如交集、并集、差集等,实现共同好友、共同爱好之类的功能。

面试官: 哦,Redis 怎么实现消息队列?

独白:卧槽,给自己挖坑了...

大彬:1、使用列表,让生产者将任务使用LPUSH命令放进列表,消费者不断用RPOP从列表取出任务。

大彬:2、发布订阅模式。类似于MQ的主题模式。只能消费订阅之后发布的消息,一个消息可以被多个订阅者消费。

大彬:3、延时队列。使用sortedset,拿时间戳作为score,消息内容作为key,调用zadd来生产消息,消费者用 zrangebyscore 指令获取N秒之前的数据轮询进行处理。

面试官: 来讲讲Redis主从复制的原理?大彬 :嗯,Redis的复制功能是支持多个数据库之间的数据同步。主数据库可以进行读写操作,当主数据库的数据发生变化时会自动将数据同步到从数据库。从数据库一般是只读的,它会接收主数据库同步过来的数据。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

大彬:下面是主从复制的原理:

当启动一个从节点时,它会发送一个 PSYNC 命令给主节点;
如果是从节点初次连接到主节点,那么会触发一次全量复制。此时主节点会启动一个后台线程,开始生成一份 RDB 快照文件;
同时还会将从客户端 client 新收到的所有写命令缓存在内存中。 RDB 文件生成完毕后, 主节点会将 RDB 文件发送给从节点,从节点会先将 RDB 文件 写入本地磁盘,然后再从本地磁盘加载到内存中 ;
接着主节点会将内存中缓存的写命令发送到从节点,从节点同步这些数据;
如果从节点跟主节点之间网络出现故障,连接断开了,会自动重连,连接之后主节点仅会将部分缺失的数据同步给从节点。
面试官: 不错,了解过期键的删除策略吗?大彬 :1、 被动删除 。在访问key时,如果发现key已经过期,那么会将key删除。

大彬:2、 主动删除 。定时清理key,每次清理会依次遍历所有DB,从db随机取出20个key,如果过期就删除,如果其中有5个key过期,那么就继续对这个db进行清理,否则开始清理下一个db。

大彬:3、 内存不够时清理 。Redis有最大内存的限制,通过maxmemory参数可以设置最大内存,当使用的内存超过了设置的最大内存,就要进行内存释放, 在进行内存释放的时候,会按照配置的淘汰策略清理内存。

面试官:很好,今天就到这吧

相关文章

  • 京东二面,Redis为什么这么快?

    本期是【 大厂面试 】系列文章的第 6 期,模拟 Redis基础知识 高频面试题目。 面试开始 面试官: 今天聊聊...

  • 京东二面,Redis为什么这么快?

    面试开始面试官: 今天聊聊Redis吧面试官 : 都说Redis速度快,那Redis为什么这么快呢?大彬 :主要是...

  • redis的底层原理

    redis 为什么这么快 redis的速度 redis的qps可以达到10万左右(每秒请求数) redis 为什么...

  • 2020-08-12:Redis单线程为什么这么快?

    前言 每日一题专栏 为什么单线程的Redis这么快 一、 redis采用了纯内存的操作进行处理数据二、 redis...

  • Redis为什么这么快

    Redis简介 Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件。它支持多种类...

  • Redis 为什么这么快?

    1、简介和应用 Redis是一个由ANSI C语言编写,性能优秀、支持网络、可持久化的K-K内存数据库,并提供多种...

  • redis为什么这么快

    基于内存,没有磁盘io 单线程,没有线程的创建及线程间的切换,也不用对竞争资源的加锁、解锁,没有了锁的等待 数据结...

  • Redis 为什么这么快?

    作者:我叫刘半仙 来源:my.oschina.net/liughDevelop/blog/2236771 本文内容...

  • Redis为什么这么快

    Redis快的原因 内存结构 单线程 IO多路复用 内存结构 Redis是KV结构的内存数据库,在内存上操作数据,...

  • redis为什么这么快

网友评论

    本文标题:京东二面,Redis为什么这么快?

    本文链接:https://www.haomeiwen.com/subject/cahjurtx.html