当前位置:网站首页>【Redis 系列】redis 学习十三,Redis 常问简单面试题
【Redis 系列】redis 学习十三,Redis 常问简单面试题
2022-04-23 11:59:00 【小魔童哪吒】
咱们一起来看看 redis 常问常用的面试题
Redis 是个啥?
http://www.redis.cn/ redis 中文网给了很明确且清晰的定义
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5HZnf7He-1650460558149)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210828092258505.png)]
-
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统
-
Redis 可以用作数据库、缓存和消息中间件
-
支持的数据结构有 8 种
字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets), bitmaps, hyperloglogs 和 geospatial
使用 redis 有什么益处?
- 存取的数据都非常快,redis 的数据是直接在内存中操作的
- 特性丰富:可用于缓存,消息队列,等等
- 支持 8 种 数据类型
Redis 为什么这么快嘞?
首先 redis 是单线程的,很多人认为单线程就一定慢,多线程就一定快,这是一个误解
- redis 使用多路 I/O 复用模型,非阻塞 的 IO
- 采用单线程,就不会有上下文切换的消耗,不用去考虑加锁和解锁的事情,没有竞争资源出现的性能消耗
- 数据结构很简单,上述 8 种 数据类型,一学就会
- 操作 redis 的数据,基本是在妥妥的操作内存,必须快
Redis 可以持久化吗?可以的话,持久化的方式有哪些?
可以持久化,有 2 种方式, RDB 和 AOF , redis 默认是支持 RDB 持久化
- RDB 持久化方式
在指定时间间隔内将内存中的数据集快照写入到磁盘中,这就是快照 snapshot ,恢复快照的时候,是把快照文件读入到内存中。
redis 通过 fork 的方式创建一个子进程来专门做持久化的动作
优势
- 适合大规模的数据恢复
- 对数据的完整性要求不高
劣势
-
需要在一定的时间间隔进行操作,如果 redis 意外宕机,最后一次写入的数据就会丢失
-
fork 子进程的时候需要占用一定的空间
-
AOF 持久化方式
AOF 是 redis 的另外一种持久化方式,以日志的形式记录每一个写操作,将 redis 执行过的写操作全部记录下来,只允许追加文件,不允许改写文件
优势
- 每一次操作 reids 都会被记录,文件的完整性好
- 每秒同步一次,可能会丢失一秒的数据
- 从不同步,这个效率是最高的
劣势
- 相对于数据文件来说,aof 文件会远大于 rdb 文件,修复的速度也比 rdb 文件慢
- aof 运行的效率比 rdb 慢,所以 redis 默认的配置是 rdb 持久化
Redis 应用场景有哪些嘞?
- 简单的消息队列
简单的消息队列做发布订阅的功能,使用到 redis 中 List 数据结构,可以通过 lpush 和 rpop 写入和读取消息,这个仅仅适用于简单的消息队列,如果数据量大,要求数据一致性,性能要好等等,当然首选专业的消息队列组件
- 用于缓存
将经常需要访问的数据访问 redis 中,并且要设置好 redis 的内存最大限制和删除 key 的策略
- 用于计数器
例如网页访问量,点赞量等等,redis 支持自增和自减操作,数据都是在内存中,很适合做计数
- 做分布式锁
redis 自带的命令 SETNX ,天然可以做分布式锁,用于管控多个节点的有序运行,当然 redis 自己也提供了 RedLock 给大家使用
RedLock 是个啥
Redis 官方站提供的基于 Redis 实现分布式锁的方式,它有如下特性:
- 容错性
只要大部分 Redis 节点存活就可以正常提供服务
- 安全特性
RedLock 是互斥访问的,永远只有一个 redis 客户端能拿到锁,执行操作
- 避免死锁
最终 redis 客户端都可能拿到锁,不会出现死锁的情况
- 做排行榜
使用 zset 做排行榜,top xx 等应用
- 做共同关注,做发现身边的好友
redis 提供集合 set ,可以计算出共同的好友,共同的兴趣,等等应用
Redis 的删除过期的 key 是如何处理的?
有 3 种方式:
- 定时过期
定时过期,就是每当设置一个 key 的时候,都给这个 key 设置对应的定时器,当这个 key ttl 到期时,就将这个 key 删除掉
每个 key 都设置了过期时间就要弄一个定时器,这样非常消耗 cpu 资源,进而影响 redis 性能
- 定期过期
定期过期,就是设置每隔一段时间,扫描 redis 中设置过期时间的 key,并且删除掉其中已经过期的 key。
- 惰性过期
惰性过期,就是每当访问这个 key 的时候,才去判断这个 key 是否失效,失效就删掉,若不访问,则这个 key 就一直存在内存中,会占用大量的内存
Redis 事务的本质是什么?
就是一组命令的集合,一个事务中所有的命令都会被序列化,在事务执行的过程,是按照顺序执行命令的,他们拥有
- 一次性
- 顺序性
- 排他性
redis 的事务没有隔离级别的概念
redis 事务中,命令是这样执行的
命令放在事务中,并没有马上执行,而是发起执行命令的时候才会执行,通过 exec 触发
redis 是单条指令保证原子性,但是事务不保证原子性
执行一个事务的流程是这个样子的:
- multi 开启事务
- 各种命令入队
- exec 执行事务
事务的 ACID 分别指的是什么?
- Atomicity 原子性
原子性指的是,事务是一个不可分割的整体,要么一起成功,要么一起失败
- Consistency 一致性
执行事务前和执行事务后,数据的完整性都必须保持一致
- Isolation 隔离性
多个事务同时在处理的时候,互不干扰,互补影响,各玩各的
- Durability 持久性
指的是,事务一旦被提交,那么影响的数据是持久性的
Redis 主从复制的原理是什么?
Slave 启动成功连接到 master 后会发送一个 sync 命令
master 收到命令后,启动后台存盘进程,同时收集所有接收到用于修改数据库集命令,在后台进程执行完毕后,master 进程将传送整个数据文件给到 slave ,并完成一次同步
全量复制
slave 服务接收到 master 传过来的数据后,将其存盘并加载到内存
增量复制
master 将新的收集到的所有修改的命令依次传递给 slave ,并完成同步
一旦重新连接 master 节点,一次完全的全量同步就会被执行
哨兵模式是干啥的?
哨兵模式,主要是用于实现 redis 集群的高可用
因为使用主从复制的方式,当 redis 主机宕机时,没有办法选举出一个主机出来,哨兵模式可以
哨兵的作用:
- 通过发送命令,Redis 服务器返回监控状态信息,包括主服务器和从服务器的
- 若哨兵检测到主服务器宕机,会自动将slave 切换 master,然后通过发布订阅通知其他从服务器,修改配置文件,让他成为主机
主观下线
如果 master 服务器宕机了,那么其中一个哨兵就会检测到,系统并不会马上执行 failover 的过程,仅仅是当前这个哨兵,判断 master 不可用,这个就是主观下线
客观下线
集群中一般哨兵也是集群的,若部署了 3 个哨兵
当其他两个哨兵也发现 master 服务器不可用的时候,那么哨兵之间就会产生投票,具体的投票算法我们后续再写,投票的结构由一个哨兵发起,进行 failover 故障转移的操作,切换成功之后,就会通过发布订阅模式,让每一个监控的哨兵把自己监控的服务器切换到这个 master 服务器上, 这个就是 客观下线
redis 的 穿透,击穿,雪崩问题可以查看上一篇文章:【Redis 系列】redis 学习十二,redis 缓存穿透,缓存击穿,缓存雪崩
参考资料:
欢迎点赞,关注,收藏
朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是小魔童哪吒,欢迎点赞关注收藏,下次见~
版权声明
本文为[小魔童哪吒]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_37322399/article/details/124307608
边栏推荐
- 一文详解头部位姿估计【收藏好文】
- Share two practical shell scripts
- 第二十五课 类的静态成员变量
- 第四章 为IM 启用填充对象之在NO INMEMORY表上指定INMEMORY列属性:示例(IM-4.4 第四部分)
- 第二十三课 临时对象
- oh-my-lotto
- Use kettle to copy records to and get records from results
- IM 体系结构:CPU架构:SIMD向量处理(IM-2.3)
- Nativeformysql connects to MySQL 8 prompt: 1251 - client does not support authentication protocol
- ImportError: libX11.so.6: cannot open shared object file: No such file or directory
猜你喜欢
Step function of activation function
5-minute NLP: text to text transfer transformer (T5) unified text to text task model
Windows11 安装MySQL服务 提示:Install/Remove of the Service Denied
远程访问家里的树莓派(上)
How to count fixed assets and how to generate an asset count report with one click
Analyze the rules for the use of robots with good performance
Win10 splash screen after startup
IFLYTEK's revenue in 2021 was 18.3 billion yuan: a year-on-year increase of 41% and a net profit of 1.556 billion yuan
WIN10 启动后花屏
怎么进行固定资产盘点,资产盘点报告如何一键生成
随机推荐
怎么进行固定资产盘点,资产盘点报告如何一键生成
第四章 为物化视图启用和禁用IM列存储(IM 4.6)
The way to change children's programming structure
5-minute NLP: text to text transfer transformer (T5) unified text to text task model
论文解读(CGC)《CGC: Contrastive Graph Clustering for Community Detection and Tracking》
第二十三课 临时对象
Cognition and R & D technology of micro robot
Database Navigator 使用默认MySQL连接提示:The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or repres
Here comes the detailed picture and text installation tutorial of H5 game
Fabric 1.0源代码分析(33) Peer #peer channel命令及子命令实现
Next. JS static data generation and server-side rendering
The fourth chapter is about enabling and disabling the im column storage of table space for im enabled filling objects (IM 4.5)
Tan Xiang, CEO of Kechuang · Pera software: the essence of zero trust is digital security. To B should also deeply study the user's mind
Nacos Basics (5): getting started with Nacos configuration
Nacos Foundation (9): Nacos configuration management from single architecture to microservices
After a circle, I sorted out this set of interview questions..
SOFA Weekly | 年度优秀 Committer 、本周 Contributor、本周 QA
WIN10 启动后花屏
解决由于找不到amd_ags_x64.dll,无法继续执行代码。重新安装程序可能会解决此问题,地平线(Forza Horizon 5)
VMware virtual machines export hard disk vmdk files using esxi