Redis队列优先级的实现方案
场景
通常使用 list 来实现队列操作,所有的任务统一都是先进先出的原则,如果想优先处理某个任务就不太合适,这个时候就需要让队列有优先级的概念,实现方式有以下两种方式:
-
单一列表实现
队列正常的操作是左进(lpush)右出(rpop),为了先处理高优先级任务,在遇到高级别任务时可以直接插队,直接放入队列头部(rpush),这样从队列头部(右侧、rpop)获取任务时取到的就是高优先级的任务。如下图:
-
两个队列实现
使用两个队列,list1作为普通队列,list2作为高级队列,针对任务的优先级别放入不同的队列,通过Redis的BRPOP命令可以按顺序从多个队列中取值,BRPOP会按照给出的 key 顺序查看,并在找到的第一个非空 list 的尾部弹出一个元素。获取数据命令【 BRPOP list2 list1 0 】,如下图:
本文来自博客园,作者:疯子丶pony,转载请注明原文链接:https://www.cnblogs.com/mklblog/p/16744936.html