Java面试技术栈(四):消息中间件 Redis & MQ

  • Redis的支持的数据类型

String:最大512MB    Hash:哈希    List:列表     Set:集合  zset:有序集合    

Redis持久化方式,RDB(Redis Database)和AOF(Append-only file)优先

Redis的高可用方案:  Master + Slave + Sentinel 1 + Sentinel 2 

缓存雪崩:当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,会给后端系统带来很大压力。导致系统崩溃。

如何避免:

  1. 做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期
  2. 不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。
  3. 在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
  • MQ消息队列

优点:在这个场景中,A 系统跟其它各种乱七八糟的系统严重耦合,A 系统产生一条比较关键的数据,很多系统都需要 A 系统将这个数据发送过来。A 系统要时时刻刻考虑 BCDE 四个系统如果挂了该咋办?要不要重发,要不要把消息存起来?

概括讲就是:解耦、异步、削峰

缺点:系统可用性会降低 & 系统复杂性增加

  • MQ组成(结构):
  1. Broker:消息服务器,作为server提供核心服务
  2. Producer:消息生成者,业务的发起方,负责生产消息传输给Broker
  3. Concumer消息消费者,业务的处理方,负责从Broker获取消息,并进行业务处理
  4. Topic:发布-订阅模式下的消息汇集地,实现消息广播(发送给不同的订阅者)
  5. Queue:队列,PTP模式下,特定生产者向特定queue发送消息,消费者订阅特定的queue完成消息的接收
  6. Message:消息体
  • 模式:

  1. 点对点,使用queue

  2. 发布-订阅 使用topic

猜你喜欢

转载自blog.csdn.net/fengj20015/article/details/108348776