2024年Linux最全《对线面试官》 高频 Redis 面试题(上),面试官

文章分享了Linux学习资源,强调知识体系的重要性,并详细讲解了缓存穿透、缓存雪崩和Redis的持久化、内存回收机制。同时,文章还提到了运维技术面试题集锦,涵盖了多个技术领域,鼓励系统学习和团队合作以提升技术能力。
摘要由CSDN通过智能技术生成

最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

资料预览

给大家整理的视频资料:

给大家整理的电子书资料:

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

5、什么是缓存穿透?怎么解决?
  • 缓存穿透
    是指当去查询一个不存在的数据时,会因为缓存不命中而去数据库中查询
    如果出现高并发的去查询一个不存在的数据,就会导致这个不存在的数据每次请求都会到数据库中查询,造成缓存穿透
    PS:穿透,相当于穿过 Redis 直接打到后端数据库上
  • 解决方法
    1、将空数据缓存
    如果查询一个数据返回了空值(不管是数据不存在的原因还是系统故障的原因),仍然把这个空结果缓存起来,并设置过期时间
    2、布隆过滤器

将所有可能存在的数据哈希到一个足够大的bitmap 中,一定不存在的数据会被这个 bitmap 直接拦截掉,从而避免对数据库的查询

6、什么是缓存雪崩?该如何解决?
  • 缓存穿透
    是指数据缓存在某一段时间内集中失效,发生了大量的缓存穿透,导致所有的查询请求都打到数据库上,造成了缓存雪崩
  • 解决方法

1、加锁排队

缓存失效后,通过加锁或者队列来控制对数据库进行操作的线程数量,从而避免数据库压力过大

2、数据预热
通过缓存 reload 机制,预先刷新缓存,在即将发生大并发访问前手动触发缓存,并设置不同的过期时间

3、二级缓存(双缓存)策略
Cache1 为原始缓存,Cache2 为拷贝缓存,Cache1 失效时,可以访问 Cache2,Cache1 缓存失效时间设置为短期,Cache2 设置为长期

4、其他

除此之外,还可以在缓存的时候给过期时间加上一个随机值,这样就会大幅度地减少缓存在同一时间过期

7、Redis 持久化机制有哪几种

Redis 是将数据运行在内存中的,如果出现服务挂掉或者服务器宕机都可以导致数据全部丢失

为了解决 这个问题 redis 提供了两种数据持久化机制——RDB、AOF
RDB

  • RDB 是 Redis DataBase 的缩写
  • RDB 按照一定时间间隔把内存中的数据以快照的形式(dump.rdb)保存到磁盘中
  • 触发 RDB 持久化过程为手动触发和自动触发
    • 手动触发:save 命令或 bgsave 命令
    • 自动触发:配置文件添加 save 字段

AOF

  • AOF 是 Append-only file 的缩写
  • Redis 会将每一个收到的写命令都追加到 AOF 文件末尾,类似于 MySQL 的 binlog,Reids重启后会通过重新执行 AOF 文件中的写命令来实现数据的恢复
  • 通过在配置文件里添加 appendonly yes 字段来开启 AOF

RDB 和 AOF 的区别

  • RDB 使用快照的形式来持久化整个 Redis 数据,而 AOF 只是将每次执行的命令追加到 AOF 文件中
  • 如果 RDB 和 AOF 都配置了,那么优先采用 AOF
  • AOF 提供了多种数据同步频率,最多丢失 1 秒的数据而已,RDB是隔一段时间进行持久化,所以说 AOF 的数据安全性要比 RDB 高
  • -对于具有相同数据的的 Redis,AOF 文件通常会比 RDB 文件体积更大
8、在进行RDB持久化时,Redis 可以处理写请求吗

可以,Redis 使用操作系统的多进程写时复制技术 COW(Copy On Write) 来实现快照持久化,保证数据 一致性

Redis 在 RDB 持久化时会 fork 出一个子进程,由子进程来负责持久化,而父进程继续处理客户端请求

当父进程收到客户端的写请求时,就会将数据复制一份传给子进程,子进程将副本数据写到 RDB 文件里

9、谈谈 Redis 的内存回收机制吧

Redis是基于内存的数据库,常被用作缓存,以此来提高系统的响应速率与性能

因此在一些业务场景中往往会出现 Redis 消耗了大量的内存,导致系统出现性能瓶颈,为此 Redis 提供了内存回收机制(Redis默认采用noeviction策略)


请添加图片描述

  • volatile-lru:
    在设置了过期时间的所有键中,选取最近最少使用的数据删除
  • volatile-lfu:
    在设置了过期时间的所有键中,选取最近最不常用,也就是一定时期内被访问次数最少的数据删除
  • volatile-random:
    筛选出设置了过期时间的键值对,随机删除。
  • volatile-ttl:
    筛选出设置了过期时间的键值对,越早过期的越先被删除。
  • allkeys-lru:
    在所有键中,选取最近最少使用的数据删除
  • allkeys-lfu:
    在所有键中,选取最近最不常用,也就是一定时期内被访问次数最少的数据删除
  • allkeys-random:
    采用随机淘汰策略删除所有的键值对,这个策略不常用。
  • noeviction:
    不淘汰任何键值对,当内存满时,如果进行读操作,例如get命令,它将正常工作,而做写操作,它将返回错 误,也就是说,当Redis采用这个策略内存达到最大的时候,它就只能读不能写了
10、谈谈 Redis 的键过期机制吧

除了 Redis 的内存回收机制可以有效解决消耗内存过高的问题

还有一个键过期机制,通过给 key 设置一个过期时间,超过过期时间后 key 就会被删除,内存就被回收
Redis key 过期处理的方式有三种:

  • 惰性删除
    不管 key 有没有过期都不主动删除,等到每次去获取 key 时再判断是否过期,如果过期就删除该 key ,否则返回 key 对应的值。这种策略对内存不够友好,可能会浪费很多内存
    **缺点:**若大量的 key 在超出超时时间后,很久一段时间内,都没有被获取过,那么可能发生内存泄露(无用的数据占用了大量的内存)
  • 定时删除
    给 key 设置了过期时间后,会为该 key 创建一个定时器
    让定时器在 key 的过期时间来临时, 对 key 进行删除

**缺点:**定时器的创建耗时,若为每一个设置过期时间的 key 创建一个定时器(将会有大量的定时器 产生),性能影响严重,因为每个定时器都会占用一定的 CPU 资源

  • 定期删除
    系统每隔一段时间就定期扫描一次,发现过期的键就进行删除
    以下两种方式可以触发定期删除:
    1、配置redis.conf 的 hz 选项,默认为10 (即1秒执行10次,100ms一次,值越大说明刷新频率越快,对 Redis性能损耗也越大)
    2、配置内存回收策略,当 Redis 消耗内存达到最大内存使用限制,就会自行对应的策略,来对过期 key 进行删除

在 Redis 当中,其选择的是策略 2 和策略 3 的综合使用
不过 Redis 的定期删除只会扫描设置了过期时间的 key,因为设置了过期时间的键 Redis 会单独存储,所以不会出现扫描所有 key 的情况

11、同一时间大量 key 都过期的话会有什么影响?
  • 读写请求响应时间变长
    当 key 过期后,内存管理器需要对 key 占用的内存进行回收,会产生一定的 CPU 消耗
    大量的 key 过期会导致频繁回收内存,消耗 CPU 资源,导致系统响应变慢
  • 缓存雪崩
    缓存失效后导致所有的查询操作都落在数据库上,造成了缓存雪崩,甚至严重会导致数据库发生故障
12、slave是怎么实现键过期策略的?

slave 不会进行过期扫描, slave 对过期 key 的处理是被动的
当 master 采用定期或惰性删除过期 key 时,会同步一个 del 操作到 slave,这样 slave 也可以删除过期 key

RDB对过期Key的处理

  • 持久化数据到RDB文件

    • 持久化之前会检查 key 是否过期,过期的 key 不进入RDB文件
  • 从RDB文件恢复数据

    • 数据载入数据库之前,会对 key 进行过期检查,如果过期则不导入数据库(主库)
    • 如果 RDB 文件里有过期的键,那还是会载入,但是主从在数据同步时(全量复制),slave的数据会被清空(丢弃原先所有数据),所以不影响

AOF对过期Key的处理

  • 持久化数据到 AOF 文件

为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!

这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。

本份面试集锦涵盖了

  • 174 道运维工程师面试题
  • 128道k8s面试题
  • 108道shell脚本面试题
  • 200道Linux面试题
  • 51道docker面试题
  • 35道Jenkis面试题
  • 78道MongoDB面试题
  • 17道ansible面试题
  • 60道dubbo面试题
  • 53道kafka面试
  • 18道mysql面试题
  • 40道nginx面试题
  • 77道redis面试题
  • 28道zookeeper

总计 1000+ 道面试题, 内容 又全含金量又高

  • 174道运维工程师面试题

1、什么是运维?

2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

3、现在给你三百台服务器,你怎么对他们进行管理?

4、简述raid0 raid1raid5二种工作模式的工作原理及特点

5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

7、Tomcat和Resin有什么区别,工作中你怎么选择?

8、什么是中间件?什么是jdk?

9、讲述一下Tomcat8005、8009、8080三个端口的含义?

10、什么叫CDN?

11、什么叫网站灰度发布?

12、简述DNS进行域名解析的过程?

13、RabbitMQ是什么东西?

14、讲一下Keepalived的工作原理?

15、讲述一下LVS三种模式的工作过程?

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

17、如何重置mysql root密码?

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

mysql如何减少主从复制延迟?

17、如何重置mysql root密码?

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值