共计 2451 个字符,预计需要花费 7 分钟才能阅读完成。
大家好,我是散步 coding, 最近在整顿 2022 年 Redis 最新面试题, 大家也能够通过我上面的博客地址在线浏览, 明天讲讲第 4 篇 – Redis 数据长久化。本文首发于公众号: 散步 coding
2022 年 Redis 最新面试题目录
- Redis 基础知识
- Redis 数据结构
- Redis 事务
- Redis 数据长久化
- Redis 集群
- Redis 淘汰策略
- Redis 分布式锁
- Redis 缓存问题
- 运维和部署
概要
- 为什么 Redis 须要把所有数据放到内存中?
- Redis 如何做长久化的?
- Redis key 的过期工夫和永恒无效别离怎么设置?
为什么 Redis 须要把所有数据放到内存中?
呈现概率: ★★★
<font color=#FF000 >Redis 为了达到最快的读写速度将数据都读到内存中,并通过异步的形式将数据写入磁盘 </font>。所以 Redis 具备疾速和数据长久化的个性。如果不将数据放到内存中,磁盘的 I / O 速度会重大影响 redis 的性能。在内存越来越便宜的明天,redis 将会越来越受欢迎。不过也能够设置了最大应用的内存,则数据已有记录数达到内存限值后将不能持续插入新值。
Redis 如何做长久化的?
呈现概率: ★★★★★
<font color=#FF000 >bgsave 做镜像全量长久化,AOF 做增量长久化 </font>。因为 bgsave 会消耗较长时间,不够实时,在停机的时候会导致大量失落数据,所以须要 AOF 来配合应用。在 redis 实例重启时,优先应用 AOF 来复原内存的状态,如果没有 AOF 日志,就会应用 RDB 文件来复原。
如果再问 AOF 文件过大复原工夫过长怎么办?你通知面试官,Redis 会定期做 AOF 重写,压缩 AOF 文件日志大小。如果面试官不够称心,再拿出杀手锏答案,Redis4.0 之后有了混合长久化的性能,将 bgsave 的全量和 AOF 的增量做了交融解决,这样既保证了复原的效率又兼顾了数据的安全性。这个性能甚至很多面试官都不晓得,他们必定会对你另眼相看。
如果对方诘问那如果忽然机器掉电会怎么?取决于 AOF 日志 sync 属性的配置,如果不要求性能,在每条写指令时都 sync 一下磁盘,就不会失落数据。然而在高性能的要求下每次都 sync 是不事实的,个别都应用定时 sync,比方 1s1 次,这个时候最多就会失落 1s 的数据。
1)、RDB 工作原理
既然说 RDB 是 Redis 中数据集的工夫点快照,在 Redis 内实现 RDB 长久化的办法有 <font color=#FF000 >rdbSave</font> 和 <font color=#FF000 >rdbSaveBackground</font> 两个函数办法(源码文件 rdb.c 中),先简略说下两者差异:
- rdbSave:是同步执行的,办法调用后就会立即启动长久化流程。因为 Redis 是单线程模型,长久化过程中会阻塞,Redis 无奈对外提供服务;
- rdbSaveBackground:是后盾(异步)执行的,该办法会 fork 出子过程,真正的长久化过程是在子过程中执行的(调用 rdbSave),主过程会持续提供服务;
RDB 长久化的触发必然离不开以上两个办法,触发的形式分为手动和主动。手动触发容易了解,是指咱们通过 Redis 客户端人为的对 Redis 服务端发动长久化备份指令,而后 Redis 服务端开始执行长久化流程,这里的指令有 save 和 bgsave。
整个长久化的过程中,主过程不进行任何 io 操作,全程都有子过程来实现,这就确保了极高的性能。如果须要进行大规模的数据恢复,且对数据恢复的完整性不是十分敏感,那么 rdb 形式要比 AOF 形式更加的高效,rdb 的毛病是最初一次长久化的数据可能会失落。
2)、AOF 工作原理
<font color=#FF000 >AOF 长久化全称 append only file</font>,以日志模式记录每个写操作,将 redis 执行过得所有写操作指令记录下来(读操作不记录)。只许追加文件但不能够改写文件,redis 启动之初会读取该文件从新构建数据,换言之,redis 重启的话就依据日志文件的内容将写操作指令从前到后执行一次以实现数据的复原工作。
AOF 默认保留的是 appendonly.AOF 文件,此文件具备可读性。
AOF 的工作原理其实相似于 mysql 的 binlog 日志语句复制。是以日志的模式记录服务器所解决的每一个写,删除操作,查问操作不会记录,以文本的形式进行记录,该文件具备可读性。
数据同步有三种同步策略:批改同步、每秒同步、不被动调用 fsync 同步。
AOF 优缺点
AOF 利用 appendfsync 长久化机制,异步操作每秒记录,数据完整性要高于 rdb 如果一秒宕机,有可能失落 1 秒数据。雷同的数据集而言 AOF 文件要远大于 rdb 文件。复原速度要慢于 rdb,AOF 运行效率要慢于 rdb。每秒同步策略效率较好,不同步效率和 rdb 雷同。
Redis key 的过期工夫和永恒无效别离怎么设置?
呈现概率: ★★★
<font color=#FF000 >EXPIRE 和 PERSIST 命令 </font>。Redis Expire 命令用于设置 key 的过期工夫,key 过期后将不再可用。单位以秒计。Redis PERSIST 命令用于移除给定 key 的过期工夫,使得 key 永不过期。
127.0.0.1:6379> set name '散步 coding' EX 100000
OK
127.0.0.1:6379> ttl name # ttl 查看 key 过期工夫
(integer) 99997
127.0.0.1:6379> set brief '一个专一算法、数据库、架构、计算机网络的公众号'
OK
127.0.0.1:6379> ttl brief
(integer) -1
127.0.0.1:6379> PERSIST name
(integer) 1
127.0.0.1:6379> ttl name
(integer) -1 # -1 示意永恒无效
127.0.0.1:6379>
也欢送关注我的公众号: 散步 coding。一起交换, 在 coding 的世界里散步, 回复: redis, 收费获取最新 Redis 面试题 (含答案)。