Redis面试题自测

2024-06-18 20:44
文章标签 redis 面试题 自测

本文主要是介绍Redis面试题自测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、Redis 有什么作用?为什么要用 Redis为什么要用缓存?
  • 二、Redis 除了做缓存,还能做什么?
  • 三、Redis 可以做消息队列么?
  • 四、分布式缓存常⻅的技术选型⽅案有哪些?
  • 五、Redis 常⽤的数据结构有哪些?
  • 六、使⽤ Redis 统计⽹站 UV 怎么做?
  • 七、使⽤ Redis 实现⼀个排⾏榜怎么做?
  • 八、Redis 单线程模型了解吗?
  • 九、Redis6.0 之前为什么不使⽤多线程?
  • 十、Redis6.0 之后为何引⼊了多线程?
  • 十一、Redis 给缓存数据设置过期时间有啥⽤?
  • 十二、Redis 是如何判断数据是否过期的呢?
  • 十三、Redis6.0 之前为什么不使⽤多线程?
  • 十四、Redis 内存淘汰机制了解么?
  • 十五、怎么保证 Redis 挂掉之后再重启数据可以进⾏恢复?
  • 十六、什么是 RDB 持久化?
  • 十七、什么是 AOF 持久化?
  • 十八、Redis 4.0 对于持久化机制做了什么优化?
  • 十九、如何使⽤ Redis 事务?
  • 二十、Redis 事务⽀持原⼦性吗?
  • 二十一、Redis 事务还有什么缺陷?
  • 二十二、如何解决 Redis 事务的缺陷?
  • 二十三、什么是 bigkey?有什么危害?
  • 二十四、如何发现 bigkey?
  • 二十五、如何避免⼤量 key 集中过期?
  • 二十六、什么是 Redis 内存碎⽚?为什么会有 Redis 内存碎⽚?
  • 二十七、什么是缓存穿透?怎么解决?
  • 二十八、如何保证缓存和数据库数据的⼀致性?
  • 二十九、如何保证 Redis 服务⾼可⽤?
  • 三十、Sentinel(哨兵) 有什么作⽤?
  • 三十一、Redis 缓存的数据量太⼤怎么办?
  • 三十二、Redis Cluster 虚拟槽分区有什么优点?
  • 三十三、Redis Cluster 中的各个节点是如何实现数据⼀致性的?


一、Redis 有什么作用?为什么要用 Redis为什么要用缓存?

提示:内存数据库,⾼并发,常⽤来做缓存。


二、Redis 除了做缓存,还能做什么?

提示:分布式锁、限流、消息队列(不推荐)。另外,利⽤ Redis ⾃带的数据 结构我们可以很⽅便地完成很多复杂的业务场景⽐如通过 sorted set 维护⼀份排 ⾏榜。


三、Redis 可以做消息队列么?

提示:Redis 5.0 新增加的⼀个数据结构 Stream 可以⽤来做消息队列。不过,和专业的消息对象相⽐还是有很多⽋缺的地⽅。


四、分布式缓存常⻅的技术选型⽅案有哪些?

提示:Memcached 和 Redis。紧接着⾯试官可能会让你简单对⽐⼀下Memcached 和 Redis 。


五、Redis 常⽤的数据结构有哪些?

5 种基础数据类型:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。3 种特殊数据类型:HyperLogLogs(基数统计)、Bitmap (位存储)、geospatial (地理位置)。


六、使⽤ Redis 统计⽹站 UV 怎么做?

提示:可以借助 HyperLogLog 来做,占⽤空间⾮常⾮常⼩。


七、使⽤ Redis 实现⼀个排⾏榜怎么做?

提示:Redis 中有⼀个叫做 sorted set 的数据结构经常被⽤在各种排⾏榜的场景下。


八、Redis 单线程模型了解吗?

提示:Redis 通过 IO 多路复⽤程序 来监听来⾃客户端的⼤量连接(或者说是监听多个 socket),它会将感兴趣的事件及类型(读、写)注册到内核中并监听每个事件是否发⽣。


九、Redis6.0 之前为什么不使⽤多线程?

提示:单线程编程容易并且更容易维护、Redis 的性能瓶颈不在 CPU 。


十、Redis6.0 之后为何引⼊了多线程?

提示:Redis6.0 引⼊多线程主要是为了提⾼⽹络 IO 读写性能。


十一、Redis 给缓存数据设置过期时间有啥⽤?

提示:内存是有限的,如果缓存中的所有数据都是⼀直保存的话,分分钟直接 Out of memory。


十二、Redis 是如何判断数据是否过期的呢?

提示:Redis 通过⼀个叫做过期字典(可以看作是 hash 表)来保存数据过期的时间。


十三、Redis6.0 之前为什么不使⽤多线程?

提示:定期删除对内存更加友好,惰性删除对 CPU 更加友好。两者各有千秋,所以 Redis 采⽤的是 定期删除+惰性/懒汉式删除 。


十四、Redis 内存淘汰机制了解么?

提示:Redis 提供 6 种数据淘汰策略。


十五、怎么保证 Redis 挂掉之后再重启数据可以进⾏恢复?

依赖持久化机制


十六、什么是 RDB 持久化?

提示:Redis 可以通过创建快照来获得存储在内存⾥⾯的数据在某个时间点上的副本。


十七、什么是 AOF 持久化?

提示:开启 AOF 持久化后每执⾏⼀条会更改 Redis 中的数据的命令,Redis就会将该命令写⼊到内存缓存 server.aof_buf 中,然后再根据 appendfsync 配置来决定何时将其同步到硬盘中的 AOF ⽂件。


十八、Redis 4.0 对于持久化机制做了什么优化?

提示:Redis 4.0 开始⽀持 RDB 和 AOF 的混合持久化(默认关闭,可以通过配置项 aof-use-rdb-preamble 开启)。


十九、如何使⽤ Redis 事务?

提示:Redis 可以通过 MULTI , EXEC , DISCARD 和 WATCH 等命令来实现事务(transaction)功能。


二十、Redis 事务⽀持原⼦性吗?

提示:Redis 事务在运⾏错误的情况下,除了执⾏过程中出现错误的命令外,其他命令都能正常执⾏。并且,Redis 是不⽀持回滚(roll back)操作的。因此,Redis 事务其实是不满⾜原⼦性的(⽽且不满⾜持久性)。


二十一、Redis 事务还有什么缺陷?

提示:除了不满⾜原⼦性之外,事务中的每条命令都会与 Redis 服务器进⾏⽹络交互,这是⽐较浪费资源的⾏为。明明⼀次批量执⾏多个命令就可以了,这种操作实在是看不懂。


二十二、如何解决 Redis 事务的缺陷?

提示:Lua 脚本、 Redis functions。


二十三、什么是 bigkey?有什么危害?

提示:⼀个 key 对应的 value 所占⽤的内存⽐较⼤。bigkey 会消耗更多的内存空间,也会影响到性能。


二十四、如何发现 bigkey?

提示:使⽤ Redis ⾃带的 --bigkeys 参数来查找或者分析 RDB ⽂件。


二十五、如何避免⼤量 key 集中过期?

提示:给 key 设置随机过期时间 + 开启 lazy-free(惰性删除/延迟释放)。


二十六、什么是 Redis 内存碎⽚?为什么会有 Redis 内存碎⽚?

提示:内存碎⽚简单地理解为那些不可⽤的空闲内存。


二十七、什么是缓存穿透?怎么解决?

提示:⼤量请求的 key 根本不存在于缓存中,导致请求直接到了数据库上。常⻅的解决办法如下:缓存⽆效 key、布隆过滤器


二十八、如何保证缓存和数据库数据的⼀致性?

提示:3 种常⻅的缓存读写策略。


二十九、如何保证 Redis 服务⾼可⽤?

提示:Redis Sentinel 集群。


三十、Sentinel(哨兵) 有什么作⽤?

提示:监控 Redis 节点的运⾏状态并⾃动实现故障转移。


三十一、Redis 缓存的数据量太⼤怎么办?

提示:Redis Cluster。


三十二、Redis Cluster 虚拟槽分区有什么优点?

提示:解耦了数据和节点之间的关系,提升了集群的横向扩展性和容错性。


三十三、Redis Cluster 中的各个节点是如何实现数据⼀致性的?

提示:Gossip 协议


这篇关于Redis面试题自测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073027

相关文章

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

一些其他面试题

阿里二面:那你来说说定时任务?单机、分布式、调度框架下的定时任务实现是怎么完成的?懵了。。_哔哩哔哩_bilibili 1.定时算法 累加,第二层每一个格子是第一层的总时间400 ms= 20 * 20ms 2.MQ消息丢失 阿里二面:高并发场景下引进消息队列有什么问题?如何保证消息只被消费一次?真是捏了一把汗。。_哔哩哔哩_bilibili 发送消息失败

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

Redis中使用布隆过滤器解决缓存穿透问题

一、缓存穿透(失效)问题 缓存穿透是指查询一个一定不存在的数据,由于缓存中没有命中,会去数据库中查询,而数据库中也没有该数据,并且每次查询都不会命中缓存,从而每次请求都直接打到了数据库上,这会给数据库带来巨大压力。 二、布隆过滤器原理 布隆过滤器(Bloom Filter)是一种空间效率很高的随机数据结构,它利用多个不同的哈希函数将一个元素映射到一个位数组中的多个位置,并将这些位置的值置

Lua 脚本在 Redis 中执行时的原子性以及与redis的事务的区别

在 Redis 中,Lua 脚本具有原子性是因为 Redis 保证在执行脚本时,脚本中的所有操作都会被当作一个不可分割的整体。具体来说,Redis 使用单线程的执行模型来处理命令,因此当 Lua 脚本在 Redis 中执行时,不会有其他命令打断脚本的执行过程。脚本中的所有操作都将连续执行,直到脚本执行完成后,Redis 才会继续处理其他客户端的请求。 Lua 脚本在 Redis 中原子性的原因

laravel框架实现redis分布式集群原理

在app/config/database.php中配置如下: 'redis' => array('cluster' => true,'default' => array('host' => '172.21.107.247','port' => 6379,),'redis1' => array('host' => '172.21.107.248','port' => 6379,),) 其中cl

【Kubernetes】常见面试题汇总(三)

目录 9.简述 Kubernetes 的缺点或当前的不足之处? 10.简述 Kubernetes 相关基础概念? 9.简述 Kubernetes 的缺点或当前的不足之处? Kubernetes 当前存在的缺点(不足)如下: ① 安装过程和配置相对困难复杂; ② 管理服务相对繁琐; ③ 运行和编译需要很多时间; ④ 它比其他替代品更昂贵; ⑤ 对于简单的应用程序来说,可能不

【附答案】C/C++ 最常见50道面试题

文章目录 面试题 1:深入探讨变量的声明与定义的区别面试题 2:编写比较“零值”的`if`语句面试题 3:深入理解`sizeof`与`strlen`的差异面试题 4:解析C与C++中`static`关键字的不同用途面试题 5:比较C语言的`malloc`与C++的`new`面试题 6:实现一个“标准”的`MIN`宏面试题 7:指针是否可以是`volatile`面试题 8:探讨`a`和`&a`