面试的时候,关于Redis的问题,如果你说可以做消息队列,那么可能面试官会问你Redis做消息队列会有什么问题,是不是就一脸懵逼了?
首先Redis做消息队列的实现
于List的 LPUSH+BRPOP 的实现
典型的命令为:
LPUSH,将消息队列
BRPOP,从队列中取出消息,阻塞模式
就是一个典型的基于FIFL队列的解决方案。其中LPUSH是生产者做的事,而BRPOP是消费者做的事。
优点:
1.实现简单
2.Reids支持持久化消息,意味着消息不会丢失,可以重复查看(注意不是消费,只看不用,LRANGE类的指令)。
3.可以保证顺序,保证使用LPUSH命令,可以保证消息的顺序性
4.使用RPUSH,可以将消息放在队列的开头,达到优先消息的目的,可以实现简易的消息优先队列。
缺点:
1.做消费确认ACK比较麻烦,就是不能保证消费者在读取之后,未处理后的宕机问题。导致消息意外丢失。通常需要自己维护一个Pending列表,保证消息的处理确认。
2.不能做广播模式,例如典型的Pub/Discribe模式。
3.不能重复消费,一旦消费就会被删除
4.不支持分组消费,需要自己在业务逻辑层解决
总结:其实这个问题,主要考察的是你对于Redis有没有深刻的理解,正常来说谁闲着没事用Redis做队列,现成的队列一大堆,解决方案一大堆,什么RabbitMQ,RocketMQ,Kafka一类的;
网友评论