【2023】Redis相关面试题

2023-06-23 23:39:09

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个槽位。

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

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

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

具体来说, Redis使用一个虚拟环形哈希空间来表示所有的节点。每个节点在这个空间上会被映射到一个或多个槽位。
在Redis集群中,这些槽位被动态地分配给各个节点。每个槽位代表了数据的一个部分,Redis把数据根据它们的key哈希到对应的槽位上,然后把这些数据存储在槽位所对应的节点上。
当我们向Redis写入数据时,Redis会根据key的哈希值找到对应的槽位,然后把数据写入到对应的节点上。这样就可以保证数据的高可用性和可扩展性。

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

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

更多推荐

接口测试工具详解

首先,什么是接口呢?接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的,比如说咱们用的app、网址这些它在进行

c#设计模式-创建型模式 之 建造者模式

简介:将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。提供了一种创建对象的最佳方式。一个Builder类会一步一步构造最终的对象。该Builder类是独立于其他对象的。意图是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。建造者模式的核心思想就是将一个复杂对象的构建与其表示分

二,手机硬件参数介绍和校验算法

系列文章目录第一章安卓aosp源码编译环境搭建第二章手机硬件参数介绍和校验算法第三章修改安卓aosp代码更改硬件参数第四章编译定制rom并刷机实现硬改(一)第五章编译定制rom并刷机实现硬改(二)第六章不root不magisk不xposedlsposedfrida原生修改定位第七章安卓手机环境检测软件分享第八章硬改之设

【C语言】指针的进阶(一)

目录前言1.字符指针2.指针数组3.数组指针3.1数组指针的定义3.2&数组名VS数组名3.3数组指针的使用4.数组参数、指针参数4.1一维数组传参4.2二维数组传参4.3一级指针传参4.4二级指针传参5.函数指针前言指针在C语言中可谓是有着举足轻重的存在,初学C语言的我们在《指针》章节已经接触过了一些指针的知识,知道

【网络豆送书第四期】《用户画像:平台构建与业务实践》

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。公众号:网络豆座右铭:低头赶路,敬事如仪个人主页:网络豆的主页​​​​​本期好书推荐:《用户画像:平台构建与业务实践》粉丝福利:书籍赠送:共计送出4本参与方式:关注公众号:网络豆云计算学堂回复关键词:第四期送书截止时间:2023年9月24日中午12:00

嵌入式C语言知识复习和提高

文章目录前言基础知识main函数防BUG注释(重要)关键字标识符命名(驼峰命名)常量类型变量printf1.输出不同类型数据2.输出不同宽度数据3.不同类型数据长度归类scanf函数运算符sizeof(运算符,优先级2)逗号运算符关系运算符逻辑运算符三目运算符强制类型转换流程控制if语句switchcase循环结构fo

Python基于Flask的高校舆情分析,舆情监控可视化系统

目录一、数据采集二、数据预处理三、舆情分析四、数据可视化五、系统集成六、用户交互功能实现:七、系统优化总结随着互联网的普及和信息量的爆炸式增长,网络舆情数据变得越来越庞大和复杂。高校作为社会的重要组成部分,其舆情数据同样具有重要意义。因此,为了更好地监控和了解高校舆情数据的动态和发展趋势,我们需要构建一个基于Flask

Linux 终端命令总结

一、常用的七条命令命令对应英文作用lslist查看当前文件夹下的内容pwdprintworkdirectory查看当前所在文件夹cd[目录名]changedirectory切换文件夹touch[文件名]touch如果文件不存在新建文件mkdir[目录名]makedirectory创建目录rm[文件名]remove删除指

Appium元素定位

1.目的当今社会,人们的生活几乎已经无法离开形形色色的APP了,它提供给我们的便利与服务意义远远超出了其本身的软件价值。作为测试来说移动应用也早已是各大互联网公司的拳头产品,其本身的开发周期短,附属产品价值高等特性决定了今后的主导地位。那么在日常的测试活动中,移动应用的质量保障就成为了各个测试团队的主要课题,面对高速迭

软件定制app开发方式与优势|小程序搭建

软件定制app开发方式与优势|小程序搭建目前软件定制app开发方式主要两种1、利用模板开发很多软件开发公司会以模板的方式出售,即现有的app功能和设计样式都是现成的,无需从零开始定制开发。优点:费用低,一般价格在几千到上万。快速上线,方便实惠;缺点:功能固定,难以修改。在此之前需要确定自己需要哪些功能,现有app模板是

小乌龟(TortoiseGit)连接GitLab

目录🍟写在前面🍟实验目标🍟安装gitlab🍿1、安装依赖🍿2、下载清华gitlab包🍿3、安装gitlab🍿4、修改配置文件🍿5、管理命令🍟访问gitlab🍟界面设置🍿修改语言🍿修改密码🍿创建项目🍟下载小乌龟安装包🍟配置ssh秘钥🍟Git目录设置🍟推送/拉取操作🦐博客主页:大虾好吃吗

热文推荐