舌战面试官-中间件篇

由于项目中这两个使用的比较多,我主要挑一些比较常见的面试题来写,主要是查缺补漏

redis

一、redis的内存淘汰机制

内存淘汰机制是说当redis内存空间不足,怎么处理新写入的数据和需要额外申请空间的数据

(1)全局键选择性移除

1.当内存不足时,清除最近最不常用的数据

2.当内存不足时,新写入数据会报错

3.当内存不足时,随机移除某个key

(2)设置过期时间移除
1.当内存不足时,在设置了过期时间的key中,移除最近最少使用的key

2.当内存不足时,在设置了过期时间的key中,随机移除一个key

3.当内存不足时。在设置了过期时间的key中,移除最快过期的那个key

二、 redis的过期策略

过期策略是说在key过期时,redis应该用怎样的策略去处理它

redis使用的是惰性过期和定期过期
定时过期:每个key都有自己的过期时间,时间一到就清除掉。但是这样cpu就可能频繁io,影响cpu性能

惰性过期:只有当访问这个key,发现key已经过期时,才会去清除它。。但是这样就会出现大量已经过期的key还存放在内存里面这种情况

定期过期:每过一段时间扫描一定数量的key,如果发现有key过期了就把它清理掉。这样就平衡了cpu和内存的性能优化

三、redis集群的架构是怎样的

redis集群由哨兵和主从架构组成

由三个以上的哨兵实例去监控redis主从是否正常运行,如果主节点宕机也可以选举新的主节点

主节点只负责写入数据,异步把数据同步到从节点,二从节点都负责读取数据

mq

mq怎么保证消息一致性?

首先生产者要实现ack机制,而不是使用事务,事务虽然也能保证消息一致性,但太耗时

生产者-mq阶段:生产者在发送消息前,先备份数据在本地缓存,如果能收到mq交换机正确接收的ack,就从本地缓存删除这条数据,代表数据正确到达;同时有定时任务扫描本地缓存,如果有超过一定时间未收到确认的消息,就重发;每隔一秒钟,将本地消息的数据备份到磁盘,这样即使生产者宕机也可以恢复数据,但是可能会有1s的数据丢失

mq阶段:mq收到消息,需要消费者消费。如果mq宕机,未消费的消息就会丢失,所以mq也需要定时同步数据到磁盘

mq-消费者:消费者需要关闭自动确认,因为可能消费者处理消息过程中会有异常需要重发,但是自动确认机制在消费者收到数据就回复给mq正确ack,mq以为发送成功就删除数据,出现消息丢失。所以消费者需要在处理过程中捕获异常,将异常消息放入队列中,mq扫描这个队列然后重发,这个队列也叫做死信队列。

为什么使用mq?mq的好处

削峰,异步,解耦

削峰是说大量的请求进来,我们可以先用mq存储消息,然后定时任务拉取消息去处理,使得服务器的压力没有这么大

异步是说一个复杂的业务处理,我们可以拆分出来,先处理一部分基础业务,将消息存储在mq,然后请求返回,剩下的业务从队列中拉取进行处理,这样请求就不会一直被阻塞

解耦是说我们可以将业务合理的拆分,约定好消息格式,然后通过mq进行通信,实现低耦合

mq的工作方式?

1.simple :简单的收和发,没有实战意义

2,work: 消费者竞争,谁拿到消息谁消费

3.publish :所有的消费者都消费这条消息

4.rout:业务上定义路由字符串,对应的字符串走对应的通道

5.topic:业务上定义路由字符串,模糊匹配上哪条通道就走哪条

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值