现在很多码农都有接触到Redis,用两个服务器,node处理请求,把数据全部push到 redis缓存队列中,另一个php服务器不断的pop这个队列里的数据然后与mysql交互做持久化,接下来就跟大家介绍一下Redis做消息队列的小方法。
队列是入口和出口不在一边,因此我们可以利用:LPUSH 结合 RPOP、或者 RPUSH 结合 LPOP来实现。Redis 不适合拿来当消息队列,一些基本的要求:顺序保证,消息至少到达一次,持久化等等特性都完全没有保证。如果是内部系统拿来跑一些异步任务并且对可用性和性能要求都不高的情况下,不失是一种省事方便的选择。
Redis 的 List 和 Streams 两种数据类型,就可以满足消息队列的这三个需求。List 本身就是按先进先出的顺序对数据进行存取的,所以,如果使用 List 作为消息队列保存消息的话,就已经能满足消息保序的需求了。
redis做消息队列,一旦有业务爆发,内存不够直接挂掉,对服务器内存要求多。建议用ssdb,和redis兼容,解决Redis容量有限问题。
RPOPLPUSH重新入队,即把备份列表右侧元素(表尾)重新入队,可能会出现消息被重复消费的情况,因此消费操作要实现幂等性,即保证重复消费结果一致。
Redis是典型的基于Reactor的事件驱动模型,单进程单线程,高效的框架总是类似的。网络模型与spp的异步模型几乎一致。
领取专属 10元无门槛券
私享最新 技术干货