【2023】Redis相关面试题

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【2023】Redis相关面试题

1. Redis是什么?它有什么特点?

答:Redis是一个使用C语言编写的开源、高性能、支持多种数据结构的NoSQL数据库

  • 支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等。
  • 数据存储在内存中,可以快速读写。
  • 支持数据持久化,可以将数据保存到磁盘上。提供了丰富的功能,如发布订阅、事务、 Lua 脚本等。
  • 具有高可用性和可扩展性。

2.Redis的常用数据结构有哪些?适合的应用场景?

答:Redis支持五种数据类型:字符串(string)类型、哈希(hash)类型、列表(list)类型、集合(set)类型和有序集合(sorted set或zset)类型。

  • 字符串:适合存储简单的值,如计数器、缓存、session ID等。
  • 哈希:适合存储对象,如用户信息、文章信息等。
  • 列表:适合存储队列、聊天记录等。
  • 集合:适合存储标签、好友列表等。
  • 有序集合:适合存储排行榜等需要按照分数排序的数据

3. Redis的主从复制是如何实现的?

答:Redis主从复制是通过在从服务器上启动一个Redis进程,连接到主服务器并发送SYNC命令来实现的。

主服务器创建一个快照文件并将其发送到从服务器。然后,主服务器将其所有写操作复制到从服务器。在复制过程中,从服务器连接到主服务器并接收命令,以保证数据不会丢失。

4. Redis如何实现持久化?各自的优缺点是什么?

答:Redis有两种持久化方式:快照日志文件。快照是把当前内存中的数据作为一个副本保存到硬盘中的一个文件中。日志文件则是将写操作写入一个日志文件中,当Redis重启时,会从日志文件中读取并重新构建数据。

  • RDB 持久化文件较小,恢复速度快,但可能会有数据丢失。
  • AOF 持久化文件较大,恢复速度较慢,但更加可靠,因为它记录了每个写操作。

5. Redis的并发控制是如何实现的?

答:Redis使用单线程模型,每个客户端请求按顺序处理,保证了并发的安全性。此外,Redis采用了异步I/O和非阻塞I/O技术来提高性能。

6. Redis的缓存淘汰策略有哪些?

答:Redis的缓存淘汰策略有四种:

  • LRU(最近最少使用)
  • LFU(最不常用)
  • TTL(生存时间)
  • 随机
  • 可以通过修改配置文件或设置键的过期时间来使用这些策略。

7. Redis的事务是如何实现的?

答:Redis使用MULTIEXECWATCH命令实现事务。MULTI命令将客户端的请求推到一个队列中,EXEC命令执行队列中的所有命令。WATCH命令可以监听一个或多个键的变化,如果在队列中执行事务期间有被监听的键被其他客户端修改,则事务会被取消。

root@1b9968da8463:/data# redis-cli
127.0.0.1:6379> set name 'Peter'
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set id '001'
QUEUED
127.0.0.1:6379> get id
QUEUED
127.0.0.1:6379> set depName 'Dev'
QUEUED
127.0.0.1:6379> set age 25
QUEUED
127.0.0.1:6379> exec
1) OK
2) "001"
3) OK
4) OK
127.0.0.1:6379> get age
"25"

8. Redis的哨兵是什么?它的作用是什么?

答:Redis哨兵是一个独立的进程,可以监测Redis服务器的健康状态并在主服务器宕机时自动将从服务器升级为主服务器。

9. Redis有哪些常见的使用场景?

答:Redis常见的使用场景包括缓存、消息队列、计数器、排行榜、分布式锁等。

10. Redis如何实现分布式锁?

答:Redis通过SETNX命令来实现分布式锁,在获取锁之前需要先判断当前锁是否已经被其他客户端占用,如果没有被占用则获取锁,否则等待一定时间后重试。

11.Redis 的过期键删除策略是什么?它是如何处理过期键的?

答:Redis 使用惰性删除和定期删除两种策略处理过期键:

  • 惰性删除:当客户端尝试访问一个已经过期的键时,Redis 会立即删除该键并返回空值。这种方式确保在访问时进行删除,但可能会造成一些键在过期后仍然存在一段时间。
  • 定期删除:Redis 每隔一段时间(默认是 1 秒)会对一部分过期键进行检查和删除。这种方式通过遍历一部分过期键,将满足条件的键删除,以释放内存。定期删除可以防止过期键堆积带来的内存压力。

12.Redis的并发竞争问题怎么解决?

答:Redis采用单进程单线程模型,不存在多线程竞争的问题。

同时,Redis使用事件驱动模式,通过epoll等技术来支持高并发,可以处理成千上万的并发连接。为了保证数据一致性,Redis提供了原子操作和事务支持,可以避免竞争问题。

13.Redis集群槽位有多少个?

答:Redis集群默认有16384个槽位。

如果某个节点缺少一个槽位,这个节点将无法正常工作,因为每个节点必须拥有完整的槽位范围才能正确处理对应的键。因此,如果某个节点缺少一个槽位,需要将这个节点重启并重新分配槽位,以确保它能够正常工作。

4.Redis数据写入的时候怎么在各节点槽位分配数据的?

答:Redis使用一致性哈希算法来把数据分布到不同的节点上。

具体来说, Redis使用一个虚拟环形哈希空间来表示所有的节点。每个节点在这个空间上会被映射到一个或多个槽位。

在Redis集群中,这些槽位被动态地分配给各个节点。每个槽位代表了数据的一个部分,Redis把数据根据它们的key哈希到对应的槽位上,然后把这些数据存储在槽位所对应的节点上。

当我们向Redis写入数据时,Redis会根据key的哈希值找到对应的槽位,然后把数据写入到对应的节点上。这样就可以保证数据的高可用性和可扩展性。

15.一个Redis集群各槽位与总槽位之间是什么关系

Redis集群将整个数据集分成16384个槽位(slot),每个槽位可以存储一个键值对。集群中每个节点都可以负责多个槽位,而每个槽位只能被一个节点负责。所有节点负责的槽数量之和必须等于16384。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6天前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
1月前
|
存储 NoSQL Java
可能是最漂亮的Redis面试基础详解
我是南哥,相信对你通关面试、拿下Offer有所帮助。敲黑板:本文总结了Redis基础最常见的面试题!包含了Redis五大基本数据类型、Redis内存回收策略、Redis持久化等。相信大部分Redis初学者都会忽略掉一个重要的知识点,Redis其实是单线程模型。我们按直觉来看应该是多线程比单线程更快、处理能力更强才对,比如单线程一次只可以做一件事情,而多线程却可以同时做十件事情。但Redis却可以做到每秒万级别的处理能力,主要是基于以下原因:(1)Redis是基于内存操作的,Redis所有的数据库状态都保存在
可能是最漂亮的Redis面试基础详解
|
1月前
|
NoSQL Java API
美团面试:Redis锁如何续期?Redis锁超时,任务没完怎么办?
在40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试一线互联网企业时遇到了关于Redis分布式锁过期及自动续期的问题。尼恩对此进行了系统化的梳理,介绍了两种核心解决方案:一是通过增加版本号实现乐观锁,二是利用watch dog自动续期机制。后者通过后台线程定期检查锁的状态并在必要时延长锁的过期时间,确保锁不会因超时而意外释放。尼恩还分享了详细的代码实现和原理分析,帮助读者深入理解并掌握这些技术点,以便在面试中自信应对相关问题。更多技术细节和面试准备资料可在尼恩的技术文章和《尼恩Java面试宝典》中获取。
美团面试:Redis锁如何续期?Redis锁超时,任务没完怎么办?
|
1月前
|
NoSQL 算法 Redis
Redis面试篇
Redis面试篇
36 5
|
1月前
|
缓存 NoSQL Java
Java中redis面试题
Java中redis面试题
34 1
|
18天前
|
存储 NoSQL Redis
Redis常见面试题:ZSet底层数据结构,SDS、压缩列表ZipList、跳表SkipList
String类型底层数据结构,List类型全面解析,ZSet底层数据结构;简单动态字符串SDS、压缩列表ZipList、哈希表、跳表SkipList、整数数组IntSet
|
2月前
|
存储 缓存 NoSQL
【Java面试题汇总】Redis篇(2023版)
Redis的数据类型、zset底层实现、持久化策略、分布式锁、缓存穿透、击穿、雪崩的区别、双写一致性、主从同步机制、单线程架构、高可用、缓存淘汰策略、Redis事务是否满足ACID、如何排查Redis中的慢查询
【Java面试题汇总】Redis篇(2023版)
|
1月前
|
NoSQL Redis
redis 的 key 过期策略是怎么实现的(经典面试题)超级通俗易懂的解释!
本文解释了Redis实现key过期策略的方式,包括定期删除和惰性删除两种机制,并提到了Redis的内存淘汰策略作为补充,以确保过期的key能够被及时删除。
54 1
|
2月前
|
缓存 监控 NoSQL
阿里面试让聊一聊Redis 的内存淘汰(驱逐)策略
大家好,我是 V 哥。粉丝小 A 面试阿里时被问到 Redis 的内存淘汰策略问题,特此整理了一份详细笔记供参考。Redis 的内存淘汰策略决定了在内存达到上限时如何移除数据。希望这份笔记对你有所帮助!欢迎关注“威哥爱编程”,一起学习与成长。
|
1月前
|
缓存 NoSQL 算法
面试题:Redis如何实现分布式锁!
面试题:Redis如何实现分布式锁!