一种基于Redis实现高性能延时队列方法与流程

文档序号:35635803发布日期:2023-10-06 04:56阅读:23来源:国知局
一种基于Redis实现高性能延时队列方法与流程

本发明属于redis领域,尤其是涉及一种基于redis实现高性能延时队列方法。


背景技术:

1、对于延时任务,常见的方案就是扫描数据库表,就是用一个后台进程,每隔一段时间扫描数据库的整张数据表,判断每个任务是否达到触发的条件;有些mq消息队列可以支持延时消息;扫描数据库表缺点是有延迟,不能再指定的时间里触发,对于时效性高的场景,这种方案是不能满足需求的;mq消息队列存在问题:延时任务需要重新更新时间无法做到,因为消息发出去后,无法收回。


技术实现思路

1、有鉴于此,本发明旨在提出一种基于redis实现高性能延时队列方法,以有效利用项目中经常使用的redis缓存中间件,解决了网站会对用户推送延时任务的需要,同时使用集群模式有效的避免单点故障造成的服务中断。

2、为达到上述目的,本发明的技术方案是这样实现的:

3、一种基于redis实现高性能延时队列方法,包括以下步骤:

4、s1、利用redis的zset结构将任务的执行时间作为score,要执行的任务数据作为value,存放在zset中;

5、s2、为每个任务key创建相同数量的轮询线程,定时查询zset的score分数最小的元素;

6、s3、轮询线程查询出任务后,将该任务写入到消息队列中。

7、进一步的,在步骤s1中,为每个延时任务分配一个任务key,避免一个key存储在数据量变多以后导致查询速度变慢,如果任务量增长通过扩容redis key的数量来容纳增长的数量。

8、进一步的,在步骤s2中,用zrangebyscore key-inf+inf limit 0 1withscores命令来实现;如果最小的分数小于等于当前时间戳,就将该任务取出来执行,否则休眠一段时间后再查询。

9、进一步的,在步骤s3中,由任务处理服务进行从消息队列取消息,然后执行业务。

10、进一步的,如在实际的业务中,还依赖数据库写入数据则先修改数据库然后再向redis写入数据,如果redis写入失败,发送一条消息重新进行补偿处理保证数据的一致性。

11、进一步的,本方案公开了一种电子设备,包括处理器以及与处理器通信连接,且用于存储所述处理器可执行指令的存储器,所述处理器用于执行一种基于redis实现高性能延时队列方法。

12、进一步的,本方案公开了一种服务器,包括至少一个处理器,以及与所述处理器通信连接的存储器,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,以使所述至少一个处理器执行一种基于redis实现高性能延时队列方法。

13、进一步的,本方案公开了一种计算机可读取存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现一种基于redis实现高性能延时队列方法。

14、相对于现有技术,本发明所述的一种基于redis实现高性能延时队列方法具有以下有益效果:

15、本发明所述的一种基于redis实现高性能延时队列方法,提供了一种redis实现高性能延时队列的方法,特别适用于活动结束前一定时间给用户推送消息、优惠券过期前一定时间给用户推送消息、秒杀时下单后一定时间内未付款就自动取消订单等场景,同时本方案中延时任务是保存在redis里面的,redis具有数据持久化的机制,可以有效的避免延时任务数据的丢失,另外,redis还可以通过哨兵模式、集群模式有效的避免单点故障造成的服务中断。



技术特征:

1.一种基于redis实现高性能延时队列方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的一种基于redis实现高性能延时队列方法,其特征在于,在步骤s1中,为每个延时任务分配一个任务key,避免一个key存储在数据量变多以后导致查询速度变慢,如果任务量增长通过扩容redis key的数量来容纳增长的数量。

3.根据权利要求1所述的一种基于redis实现高性能延时队列方法,其特征在于,在步骤s2中,用zrangebyscore key-inf+inf limit 0 1withscores命令来实现;如果最小的分数小于等于当前时间戳,就将该任务取出来执行,否则休眠一段时间后再查询。

4.根据权利要求1所述的一种基于redis实现高性能延时队列方法,其特征在于,在步骤s3中,由任务处理服务进行从消息队列取消息,然后执行业务。

5.根据权利要求1所述的一种基于redis实现高性能延时队列方法,其特征在于:如在实际的业务中,还依赖数据库写入数据则先修改数据库然后再向redis写入数据,如果redis写入失败,发送一条消息重新进行补偿处理保证数据的一致性。

6.一种电子设备,包括处理器以及与处理器通信连接,且用于存储所述处理器可执行指令的存储器,其特征在于:所述处理器用于执行上述权利要求1-5任一所述的一种基于redis实现高性能延时队列方法。

7.一种服务器,其特征在于:包括至少一个处理器,以及与所述处理器通信连接的存储器,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,以使所述至少一个处理器执行如权利要求1-5任一所述的一种基于redis实现高性能延时队列方法。

8.一种计算机可读取存储介质,存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现权利要求1-5任一项所述的一种基于redis实现高性能延时队列方法。


技术总结
本发明提供了一种基于Redis实现高性能延时队列方法,包括:S1、利用redis的zset结构将任务的执行时间作为score,要执行的任务数据作为value,存放在zset中;S2、为每个任务key创建相同数量的轮询线程,定时查询zset的score分数最小的元素;S3、轮询线程查询出任务后,将该任务写入到消息队列中。有益效果:提供了一种Redis实现高性能延时队列的方法,特别适用于活动结束前一定时间给用户推送消息、优惠券过期前一定时间给用户推送消息、秒杀时下单后一定时间内未付款就自动取消订单等场景,同时本方案中延时任务是保存在redis里面的,redis具有数据持久化的机制,可以有效的避免延时任务数据的丢失,另外,redis还可以通过哨兵模式、集群模式有效的避免单点故障造成的服务中断。

技术研发人员:王鹏凯
受保护的技术使用者:紫光云技术有限公司
技术研发日:
技术公布日:2024/1/15
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1