[发明专利]一种基于缓存有序集合实现延时队列的方法在审
申请号: | 202111464807.7 | 申请日: | 2021-12-02 |
公开(公告)号: | CN114385725A | 公开(公告)日: | 2022-04-22 |
发明(设计)人: | 陈小云;杜博 | 申请(专利权)人: | 天翼电子商务有限公司 |
主分类号: | G06F16/25 | 分类号: | G06F16/25;G06F16/2455;G06F9/46;G06F11/14 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 102200 北京市昌平*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 缓存 有序 集合 实现 延时 队列 方法 | ||
本发明公开了一种基于缓存有序集合实现延时队列的方法,基于redis缓存中间件具体步骤如下:key生成指定采用hash取模方式分片实现数据分片插入队列;通过zadd命令向队列中添加元素并设置score值元素过期的时间;基于Elasticjob使用zookeepr协调节点,实现数据分片;zrangebyscore key min max withscores limit offset count:返回分数min到max的成员并按照分数从小到大排序,limit是从offset开始展示几个元素。本发明完善的解决了“订单生命周期管理,商户支付结果通知”的情况,同时因为reids线程独立性,保障了分布式环境下的操作原子性;并且相较于RabbitMQ队列,基于Netty#HashedWheelTimer,其逻辑更为简单,方便应用部署。
技术领域
本发明涉及互联网支付系统领域,特别涉及一种基于缓存有序集合实现延时队列的方法。
背景技术
在支付流程中,需要将每笔订单的支付结果通知给商户系统,通知商户系统过程中可能存在超时、商户系统处理失败等问题,此时就需要系统有个支付结果通知重试机制来解决该问题。
发明内容
本发明要解决的技术问题是克服现有技术的缺陷,提供一种基于缓存有序集合实现延时队列的方法。
本发明提供了如下的技术方案:
本发明提供一种基于缓存有序集合实现延时队列的方法,包括以下步骤:
S1、通过Elasticjob向Redis的Zset有序集合插入数据:
1).通过Elasticjob使用zookeepr协调节点,实现数据分片,为每个节点分配不同的Zset,例如节点A对应zset_1,节点B对应zset_2;
2).计算插入的zset的数据score值计算公式
score=当前系统时间+延迟时间;
3).通过redis的zdd将数据插入Redis的Zset有序集合;
S2、每个节点的轮询任务通过zookeepr分片,从Redis对应的zset拉取数据:
每个节点通过zrangebyscore从zset获取数据;
zrangebyscore key min max withscores limit offset count:返回分数min到max的成员并按照分数从小到大排序,limit是从offset开始展示几个元素;
S3、每个节点在拉取到数据后,进行支付结果通知:
(1)如果通知成功,则删除掉zset的对应的元素;
(2)如果通知失败,重复步骤S1。
与现有技术相比,本发明的有益效果如下:
1.发明完善的解决了“订单生命周期管理,商户支付结果通知”的情况,同时因为reids线程独立性,保障了分布式环境下的操作原子性;
2.并且相较于RabbitMQ队列,基于Netty#HashedWheelTimer,其逻辑更为简单,方便应用部署。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1是本发明的流程图;
图2是本发明的交互图。
具体实施方式
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于天翼电子商务有限公司,未经天翼电子商务有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202111464807.7/2.html,转载请声明来源钻瓜专利网。