redis面试题总结

Redis面试题汇总 什么是Redis? ​Redis 是一个使用 C 语言开发的 非关系型 数据库,Redis 的数据是存在内存中的,读写速度非常快。Redis 经常用来做缓存、分布式锁,消息队列。Redis 支持多种数据类型,事务 持久化、Lua 脚本、多种集群方案。 什么是分布式缓存? ​分布式缓存主要解决的是单机缓存的容量受服务器限制并且无法保存通用的信息。因为,本地缓存只在当前服务里有效,比如如果你部署了两个相同的服务,他们两者之间的缓存数据是无法共享的。主要的技术是 Memcached 和 Redis。 .. 阅读详情

一、在项目中缓存是如何使用的?

自己结合项目介绍一下,如果项目没用,硬加也要加上一个场景

二、为啥在项目中要用缓存呢?

用缓存的主要用途有两个:高性能和高并发

如何实现高性能:

系统问题:

可能1000个用户的用户体验都很差,响应很慢

改进加入缓存后:

1000个用户就第一个用户响应比较慢,后续的999个用户只需要200ms

缓存如何实现高并发:

面试中,如果自己的项目中没有高并发的场景,那么就说高性能

(3)用了缓存之后会有啥不良后果?

常见的缓存问题有三个(实际上不止三个)

1)缓存与数据库双写不一致

2)缓存雪崩

3)缓存穿透

4)缓存并发竞争

这几个是常见的面试问题,后面会讲解。如果问到,至少能说出来,并且给出解决方案

三、redis和memcached有什么区别?redis的线程模型是什么?为什么单线程的redis比多线程的memcached效率要高得多?(为什么redis是单线程的但是还可以支撑高并发)

面试官的心理分析:

这个问题问redis的时候,最基本的问题吧,redis最基本的一个内存原理和特点,就是redis实际上是个单线程工作模型,你要是不知道,那后面玩redis的时候,除了问题岂不是什么都不知道?

还有可能面试官会问你redis和memcached的区别,不过最近几年,memcached是早些年各个大互联网公司常用的缓存方案,但是最近几年基本上都是redis,没有什么公司使用memcached了。

redis和memcached有什么区别?

(1)Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构并支持更丰富的数据操作。通常在memcached里,你需要将数据拿到客户端来进行类似的修改再set回去,这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的SET/GET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会使不错的选择。

(2)内存使用效率对比:使用简单的key-value存储的话,memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于memcached。

(3)性能对比:由于Redis只使用单核,而memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比memcached性能更高。而在100K以上数据中,Memcached性能要高于redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起memcached还是稍有逊色。

(4)集群模式:memcached没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;但是Redis目前还是原生支持cluster模式的。

面试的时候,只需要回答(1)(4)即可。

redis的线程模型(重要)

文件事件处理器

Redis基于Reactor模式开发了网络事件处理器,这个处理器被称为文件事件处理器。它的组成结构为4部分:多个套接字、IO多路复用程序、文件事件分派器、事件处理器。因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型。

客户端与redis通信的一次流程

在redis启动初始化的时候,redis会将连接应答处理器根AE_READABLE事件关联起来,接着如果一个客户端根redis发起连接,此时会产生一个AE_READABLE事件,然后由连接应答处理器来处理跟客户端建立连接,创建客户端对应的socket,同时将这个socket的AE_READABLE事件跟命令请求处理器关联起来。

当客户端向redis发起请求的时候(不管是读请求还是写请求,都一样),首先就会在socket产生一个AE_READABLE事件,然后有命令请求处理器来处理。这个命令请求处理器就会从socket中读取相关数据,然后进行执行和处理。

接着redis这边准备好给客户端响应数据之后,就会将socket的AE_WRITABLE事件跟命令回复处理器关联起来,当客户端这边准备好读取响应数据时,就会在socket上产生一个AE_WRITABLE事件,会由对应的命令回复处理器来处理,就是将准备好的响应数据写入socket,供客户端来读取。

命令回复处理器写完之后,就会删除这个socket的AE_WRITABLE事件和命令回复处理器的关联关系。

为什么单线程的redis效率还这么高?

(1)纯内存操作

(2)核心是基于非阻塞IO多路复用机制

(3)单线程反而避免了多线程的频繁上下文切换问题

四、redis都有哪些数据类型?分别在哪些场景下使用比较合适呢?

面试官心理分析:

第一:看看你到底有没有全面的了解redis有哪些功能,一般怎么来用,啥场景使用,就怕你就会简单的kv操作

第二、看看你在实际项目里都是怎么玩过redis

如果你回答的不好,没说出几种数据类型,也没说出什么场景,你完了,面试官对你印象肯定不好,觉得你平时就是做简单的set和get。

面试题剖析:

(1)string

这是最基本的类型了,没啥可说的,就是普通的set和get,做简单的kv缓存

(2)hash

这个是类似map的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没有嵌套其他的对象)给缓存在redis里,然后每次读写缓存的时候,可以就操作hash里的某个字段。

例如:

key=150

value={

    "id":150,

    "name":"zhangsan",

    "age":20

}

hash类的数据结构,主要是用来存放一些对象,把简单的对象给缓存起来,后续操作的时候,你可以仅仅修改这个对象的某个字段的值。

key=150

value={

    "id":150,

    "name":"zhangsan",

    "age":21

}

(3)list

有序列表,这个可以玩出很多花样的

比如可以通过list存储一些列表型的数据结构,类似粉丝列表了、文章的评论列表了之类的东西

比如可以通过lrang命令,就是从某个元素开始读取多少个元素,可以基于list实现分页查询,这个是很棒的一个功能,基于redis实现简单的高性能分页,可以做类似微博那种下拉不断分页的东西,性能高,就一页一页走

比如可以搞个简单的消息队列,从list头怼进去,从list尾巴弄出来

举例:

微博中,某个大V的菲斯,就可以以list的格式放在redis里去缓存

key=某大v

value=[zhangsan,lisi,wangwu]

(4)set

无序集合,自动去重

直接基于set将系统里需要去重的数据扔进去,自动就给去重了。如果你需要对一些数据进行快速的全局去重,你当然可以基于jvm里的hashset进行去重,但是如果你的某个系统部署在多台机器上呢?

得基于redis进行全局的set去重

也可以基于set玩交集、并集、差集的操作,比如交集吧,可以吧两个人的粉丝列表整个交集,看看俩人的共同好友是谁。

把两个大V的粉丝都放在两个set中,对两个set做交集。

(5)sorted set

排序的set,去重但是可以排序,写进去的时候可以给一个分数,自动根据分数排序,这个可以玩很多花样,最大的特点是有个分数可以自定义排序规则。

比如说你想根据时间对数据排序,那么可以写入进去的时候用某个时间作为分数,会自动给你按照时间排序

排行榜:将每个用户以其对用的什么分数写进去,zadd board score username,接着zrevrange board 0 99,就可以获取排名前100的用户;zrank board username,可以看到用户在排行榜中的排名

zadd board 85 zhangsan

zadd board 72 wangwu

zadd board 96 lisi

zadd board 62 zhaoliu

 

96 lisi

85 zhangsan

72 wangwu

62 zhaoliu

zrevrange board 0 2 获取排名前三的用户

96 lisi

85 zhangsan

72 wangwu

查看某人的排名:zrank board zhaoliu

五、redis的过期策略能介绍一下?要不你再手写一个LRU?

 

 

20道经典Redis面试题 整理了20道经典Redis面试题,希望对大家有帮助。Redis,英文全称是(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。 阅读详情

相关推荐

【精选】30+Redis面试题整理(2024)附答案

自用redis面试圣经,记录了个人面试中经常问到的面试题、收集了网络热门面试题。

HO1_K的博客 1万+

redis面试题总结(附答案)

Redis中间件实战系列,打造精品专栏。

学Java,找哪吒 11万+

redis常见面试题有哪些?redis集群面试题及答案整理

下面要给大家带来的是一整套的redis集群面试题,包含了具体的面试题目和答案,想要来看这方面面试题的小伙伴可以来了解一下。 一、面试题及答案 1、Redis有哪些适合的场景? (1)Session共享(单点登录);(2)页面缓存;(3)队列;(4)排行榜/计数器;(5)发布/订阅; 2、Redis主要功能有哪些? (1)LUA脚本:在事务的基础上,假如,需要在服务端一次性的执行更复杂的操作,那么,这个时候lua就可以上场了。 (2)事务:在大多数的情况之下,我们需要一次执行不止一个的命令,除此之外,还要其同

zihong522的博客 3037

46道史上最全Redis面试题,面试官能问的都被我找到了(含答案)

Redis 的全称是:Remote Dictionary.Server,本质上是一个 Key-Value 类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据 flush 到硬盘上进行保存。因为是纯内存操作,Redis 的性能非常出色,每秒可以处理超过 10 万次读写操作,是已知性能最快的Key-Value DB。

jjc4261的博客 2万+

AOSP14 Launcher3——手势上滑关键类AbsSwipeHandler解析

通过精密的事件监听、状态管理和对系统动画 API 及 Launcher 内部组件的协调,实现了复杂而流畅的手势导航体验。它的抽象设计允许子类(如。是 Quickstep (Launcher3 的手势导航实现) 中处理。的核心逻辑抽象基类。这个非常核心且复杂的类。)定制特定的回家动画逻辑。好的,我们来深入分析。

Micheal_Yang's Blog 1519

从理论到实践:全面解析Cmk(设备能力指数)的应用与优化

本文全面解析了设备能力指数Cmk的核心概念、计算逻辑与关键应用场景。Cmk作为衡量设备本身固有加工能力的黄金标准,在设备验收、大修后验证及过程能力根因分析中至关重要。文章通过实战案例,详细阐述了执行Cmk测试的“五大固定”黄金法则、数据计算分析方法,并提供了Cmk不达标时的系统性排查与优化策略,帮助制造企业实现预防性质量管理。

jump7的博客 523

2026全网最硬核Redis面试题(大厂必备)

最近也在面试,所以把面试过程中遇到的面试题都记录下来,跟大家分享一下

qq_40853117的博客 2万+

推荐系统(1):推荐系统评测

对于可以离线优化的指标,我个人的看法是应该在给定覆盖率、多样性、新颖性等限制条件下,尽量优化预测准确度。用一个数学公式表达,离线实验的优化目标是:最大化预测准确度使得 覆盖率 > A多样性 > B新颖性 > C其中,A、B、C的取值应该视不同的应用而定。

数据不会骗人 2527

Redis核心技术深度解析:从单线程模型到分布式锁设计|2023面试必备+实战指南

本文系统剖析Redis核心工作机制与高频面试要点,涵盖:单线程高性能实现原理、渐进式ReHash黑科技、多线程IO演进路线、缓存穿透/雪崩/击穿终极解决方案、分布式锁Redisson看门狗机制、Cluster集群高可用方案等核心技术。通过源码级解析+大厂实战案例,深度讲解Redis在亿级流量场景下的缓存设计范式与性能调优策略,特别适合中高级开发者突破技术瓶颈。附赠:布隆过滤器实现原理、Pipeline性能优化技巧、热key探测方案等进阶内容,助你构建完整的Redis知识体系。

Zyw907155124的博客 2万+

Embedding理解及keras中Embedding参数详解,代码案例说明

Embedding理解 嵌入层将正整数(下标)转换为具有固定大小的向量 ------官网 词嵌入是一种语义空间到向量空间的映射,简单说就是把每个词语都转换为固定维数的向量,并且保证语义接近的两个词转化为向量后,这两个向量的相似度也高。 举例说明embedding过程: “Could have done better” 通过索引对该句子进行编码,每个单词分配一个索引,上面的句子就会变成这样: 122 8 114 12 创建嵌入矩阵,即每一个索引需要分配多少维向量,也就是说每个词需要转化为多少维

wo的博客 1万+

【Zabbix实战之部署篇】Docker部署Zabbix+grafana监控平台

【Zabbix实战之部署篇】docker部署Zabbix+grafana监控平台

jks212454的博客 2578

redis 40道面试题

面试还搞不懂redis,快看看这40道面试题(含答案和思维导图) 原创 ...

weixin_42847626的博客 1万+

SI案例分享--考虑ESD保护二极管的差分线阻抗仿真

PCB设计中的cut out参考面早已是SI评估中常用的阻抗优化方式,通过合理的仿真建模,可以提供合适的设计参考,并保持与测试结果的高度一致性。

一只豌豆象的博客 1437

Redis面试题及答案_2025

Redis面试题及答案_2025 1、什么是 Redis? 2、Redis 相比 memcached 有哪些优势? 3、Redis 支持哪几种数据类型? 4、Redis 主要消耗什么物理资源? 5、Redis 的全称是什么? 6、Redis 有哪几种数据淘汰策略? 7、Redis 官方为什么不提供 Windows 版本? 8、一个字符串类型的值能存储最大容量是多少? 9、为什么 Redis 需要把所有数据放到内存中? 10、Redis 集群方案应该怎么做?都有哪些方案? 11、Redis 集群方案什么情况下

weixin_43474701的博客 1317

仿真学习系列(四十二):Sigrity仿真之走线阻抗和耦合检查

在高速电路设计中,走线的阻抗和信号线之间的耦合是影响信号完整性的重要因素。设计中可能会出现多种情况,导致阻抗变化或不匹配,例如线宽的变化、跨层分割等。传统的人工检查方法常常不够高效且易忽视细节。借助仿真软件,可以快速定位问题区域,并进行精确分析,从而有效避免或减少信号反射和串扰带来的影响。

案例文章,高速信号 425

基于深度学习的树木种类识别

本文介绍了基于深度学习的树木种类识别技术。我们将通过深度学习模型和图像处理技术实现对树木的自动识别与分类。首先,我们将介绍深度学习的基本原理和相关算法。接着,我们将详细说明树木种类识别的数据准备、模型构建和训练过程。最后,我们将给出代码示例,帮助读者深入了解和实践该技术。

一键难忘的博客 2316

Redis面试题

redis面试题链接

大鹏视界U 468

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[Redis] Redis分布式锁与常见面试题

在一个分布式的系统中,也会涉及到多个结点访问同一个公共资源的情况,此时就需要通过锁来做互斥控制,避免出现类似与"线程安全"的问题.而我们之前在多线程章节学习过的synchronized这样的锁只能在当前进程中生效,在分布式这种多个进程多个主机的场景之下就无能为力了.此时我们就会使用到分布式锁.

无需多言 3123

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【redis面试题】高频redis面试题

候选人嗯~~,我想一下缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 DB 挂掉。这种情况大概率是遭到了攻击。解决方案的话,我们通常都会用布隆过滤器来解决它2.面试官候选人嗯,是这样~布隆过滤器主要是用于检索一个元素是否在一个集合中。我们当时使用的是redisson实现的布隆过滤器。它的底层主要是先去初始化一个比较大数组,里面存放的二进制0或1。

qq_50446805的博客 1090

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

面试还搞不懂redis,快看看这40道面试题

Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

2401_85910670的博客 1671

redis面试题

Redis是一个基于Key-Value存储结构的开源内存数据库,也是一种NoSQL数据库。它支持多种数据类型,包括String、Map、Set、ZSet和List,以满足不同应用场景的需求。Redis以内存存储和优化的数据结构为基础,提供了快速的读写性能和高效的数据访问。常被用作应用与数据库之间的缓存组件,提升数据IO效率。此外,Redis支持主从复制、哨兵机制和集群方式,实现高可用性和水平扩展。总而言之,Redis是一款功能强大、灵活且可靠的数据库解决方案,适用于各种企业级应用开发场景。热 Key 问题是

qq_42003527的博客 804

常见 Redis 面试题

面试时回答要有思路先定义概念(什么是 X,X 有什么作用)。然后阐述原理(原理模型、实现思路)。最后给出工程实践(常见配置、常用命令、注意事项、场景案例)。切忌空讲概念,一定要结合“Redis 在生产中怎样使用”来落地回答,才更能打动面试官。祝你面试顺利,通过率飙升!

chenxuefeng_accp的专栏 3286

Redis面试题(2022最新版)

redis面试题

pengjianglilive的专栏 2528

Redis面试题及答案(2021年Redis面试题大全带答案)

最近梳理2021最新 Redis面试题【附答案解析】,包含了 Java基础、并发、JVM、数据库、Spring、SpringMVC、Redis、SpringCloud、设计模式、MQ、Linux、Redis等多个类型。 今天这篇是关于 Redis,总结了 110 道经典问题。 这套Redis面试题大全,希望对大家有帮助哈~ 博主已将以下这些面试题整理成了一个Redis面试手册,是PDF版的 1、一个Redis实例最多能存放多少的keys?List、Set、Sorted Set他们最多能存放多少元素?

架构师专栏 2967

10个Redis高阶面试题

原理深度:持久化机制、集群原理、分布式算法实战经验:大厂真实场景的问题解决思路架构思维:高并发设计、容灾方案、性能优化新技术跟踪:Redis 7新特性(Function、Multi-part AOF)“在我们的电商系统中,使用Redis Pipeline将抢购接口的TPS从1500提升到8500”“通过优化Hash结构,将用户画像查询响应时间从45ms降低到7ms”

威哥爱编程,华为 HDE,鸿蒙极客、优快云博客专家、《鸿蒙 HarmonyOS 5/6 开发之路》系列图书第一作者 2196
上一篇: 如何设计高可用系统架构
下一篇: redis之单机多节点集群
给自己加加油
博客等级 码龄8年 302粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值