论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
数据库
›
分布式数据库
›
Redis面试问题一
Redis面试问题一
锦通
金牌会员
|
2024-7-13 05:41:00
|
显示全部楼层
|
阅读模式
楼主
主题
980
|
帖子
980
|
积分
2940
Redis在面试中有很大的概率会问到,因此我们肯定要学会回答此方面的问题。 Redis主要涉及到使用场景已经一些其他方面的问题。
下面是有可能涉及到的问题。
问题一:你近来的项目中那些场景用到了Redis呢?
必要联合简历项目上的业务进行具体阐明。该问题一是验证你项目场景的真实性,二是作为深入发问的切入点。
如果回答有关
缓存
的内容,那么接下来有可能就会问你有关缓存三兄弟(穿透、击穿、雪崩)、双写一致、持久化、数据逾期策略、数据镌汰策略方面的问题。
若回答有关
分布式锁
的内容,那么下面就有可能问你setnx、redisson等。
若回答有关
消息队列、延迟队列
方面内容,那么接下来就有可能对接纳何种数据范例进行提问。
以是可根据回答内容对有关方面进行强化。
问题二:如果发生了缓存穿透、击穿、雪崩,该怎样解决?
1.缓存穿透
Redis缓存穿透是一个在缓存系统中常见的问题,它指的是当缓存和数据库中都不存在某个查询的数据时,大量的哀求会直接穿透缓存层,直接访问数据库,导致数据库的压力骤增,甚至可能引发系统瓦解或拒绝服务(DoS)攻击。以下是关于Redis缓存穿透的具体分析:
Redis缓存穿透的原因
数据不存在
:查询的数据在数据库中本身就不存在,每次查询都会直接访问数据库。
恶意攻击
:攻击者故意查询大量不存在的数据,以绕过缓存层,直接对数据库造成压力。
业务逻辑问题
:由于代码缺陷或数据非常,导致系统频繁查询不存在的数据。
Redis缓存穿透的解决方案
缓存空对象
原理:当数据库中查询的数据为空时,将空结果也缓存起来,并设置较短的逾期时间。如许,在缓存有用期内,对于相同的查询哀求,可以直接从缓存中返回空结果,避免对数据库的再次查询。
应用场景:适用于查询结果可能为空,且对实时性要求不高的场景。
布隆过滤器(Bloom Filter)
原理:布隆过滤器主要由一个很长的二进制向量(位数组)和一系列随机映射函数(哈希函数)组成。当必要存储一个元素时,该元素通过多个哈希函数盘算出一系列位置,并将这些位置在二进制向量中对应的位设置为1。当必要查询一个元素是否存在于聚会合时,也通过同样的哈希函数盘算出位置,并检查这些位置上的位是否都为1。如果都为1,则认为该元素可能存在于聚会合;如果有任何一个位置上的位不为1,则可以确定该元素肯定不存在于聚会合。在查询缓存之前,使用布隆过滤器过滤掉可能不存在于数据库中的哀求。
缺点
存在误判率:由于哈希函数的碰撞问题,布隆过滤器在判断元素是否存在时存在肯定的误判率。即,有可能将不存在的元素误判为存在。
无法删除元素:布隆过滤器中的元素一旦被添加,其对应的位就会被设置为1,之后无法再将这些位恢复为0,因此布隆过滤器不支持元素的删除操作。
应用场景:适用于查询数据量大,且对误判率有肯定容忍度的场景。
2.缓存击穿
**缓存击穿(Cache Breakdown)给某一个key设置了逾期时间,当key逾期的时候,恰好这时间点对这个key有大量的并发哀求过来,这些并发的哀求可能会刹时把DB压垮
解决方案:
互斥锁(Mutex Lock)
:在缓存失效后,第一个哀求线程去查询数据库并重新构建缓存,其他线程则等候构建完成,然后直接从缓存中读取数据。这种方式可以镌汰对数据库的访问次数,但会增长线程等候时间。强一致性,但性能差
逻辑逾期
:逻辑逾期是一种处理缓存数据失效时间的策略,与物理逾期(即直接设置缓存项的逾期时间)不同。在逻辑逾期的方式中,缓存数据并不会在逾期时被直接删除,而是会在缓存中保留该数据,但标记其为“逾期”,表示该数据已经不再是最新的,大概已经不可用。高可用性,性能优,但不能包管数据绝对一致
3.缓存雪崩
缓存雪崩是指在缓存系统中,大量缓存
key在同一时间失效
或
Redis服务宕机
,导致大量哀求直接到达数据库,造成后端系统的压力骤增,甚至引起系统瓦解的征象。
解决方案
1.给不同key的TTL添加随机值,设置随机的失效时间
:为缓存对象设置稍微有差别的随机失效时间,避免大量缓存对象在同一时间失效。
2.利用Redis集群进步服务的可用性
:如Redis哨兵模式或Redis集群部署方式,确保个别Redis节点下线时,整个缓存层依然可用。
哨兵模式实现原理
监控:哨兵节点定期向所有主节点和从节点发送PING下令,以检查它们的运行状态。
主观下线:如果哨兵节点在给定的时间内(通过sentinel down-after-milliseconds配置)未收到某个节点的有用响应,则将该节点标记为主观下线。
客观下线:当多个哨兵节点(到达配置的quorum值)都将某个主节点标记为主观下线时,该主节点被标记为客观下线。
故障转移:在主节点被标记为客观下线后,哨兵节点会进行故障转移操作,包括从所有康健的从节点中推选一个新的主节点,并将所有从节点切换到新的主节点上。
集群模式实现原理
数据分片:Redis Cluster将数据分为16384个槽(slot),每个节点可以处理0个或多个槽。
节点通信:节点之间通过Gossip协议进行通信,交换彼此的状态信息和槽的分配环境。
故障检测:节点之间会定期发送PING消息来检测对方是否在线。如果某个节点在一段时间内未收到其他节点的响应,则将该节点标记为疑似下线。当足够多的节点都认为某个节点已下线时,该节点被正式标记为已下线。
故障转移:当主节点下线时,集群中的从节点会进行推选,推选出一个新的主节点来接受原来的槽和数据。
3.给缓存业务添加降级限流策略
:
降级可作为系统的保底策略,适用于穿透、击穿、雪崩
自动降级:系统可以根据一些关键数据进行自动降级,如CPU使用率、内存占用率、响应时间等。当这些指标超过预设的阈值时,系统可以自动关闭一些非焦点服务或功能,以开释资源,保护焦点服务。
人工降级:在某些环境下,如系统升级、维护或遇到严肃错误时,管理员可以手动触发降级操作,以镌汰对系统的影响。
流量控制:通过设置系统的最大并发数,当哀求超过这个数值时,系统可以拒绝新的哀求或将其放入队列等候处理。通过限制单位时间内的哀求数量,如每秒哀求数(QPS),来防止系统被过量的哀求压垮。
流量整形:通过平滑突发哀求,将哀求流量整形为稳固的流量,以避免系统资源的突然颠簸。
排队与哀求:当哀求超过系统处理本事时,可以将哀求放入队列中等候处理。同时,可以设置公道的等候时间和超时时间,以避免用户长时间等候或系统资源被无效占用。
4.给业务添加多级缓存
:固然这会增长Redis的存储空间需求,但可以避免大量缓存同时失效的问题。
助记
《缓存三兄弟》
穿透无中生有key,布隆过滤null隔离。
缓存击穿逾期key,锁与非期解难题。
雪崩大量逾期key,逾期时间要随机。
面试必考三兄弟,可用限流来保底。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
锦通
金牌会员
这个人很懒什么都没写!
楼主热帖
vue3 - 最新详细实现 “拖曳式课程表“ ...
快速入手node.js
奇怪,为什么ArrayList初始化容量大小 ...
漏洞利用
医院HIS体系厂家统计
如何成为一位人心所向的管理者?我的经 ...
理解MVCC
Vue实现复制粘贴功能
八、MySQL之事务控制语言
如何在文章中设置灰色文本框(正文底色 ...
标签云
运维
CIO
存储
服务器
浏览过的版块
数据仓库与分析
IOS
运维.售后
开源技术
SAP
快速回复
返回顶部
返回列表