CNode

从一个订单创建成功的12小时内,未成功发货,需要给客户退款。这个可以用什么设计实现

问答
Jjiangliqin发布于9 年前最后回复9 年前12 回复6162 浏览0 收藏

订单存放在redis管理,我个人思考的方案有: 1.采用轮询的方式看那些订单接近12小时没有发货,就给客户退款; 2.用redis设置12小时的超时ttl,在过期销毁时触发退款; 3.用redis消息订阅/发布 机制

大家有其他思路吗?希望集思广益,帮我出下idea。谢谢大家

查看回复

回复 (12)

N
nullcc#1·9 年前

2, 3中考虑有没有可能触发了退款,但退款失败,比如第三方退款API调用失败等原因。个人推荐第一种,跑一个定时service去做,失败了也可以记录下来供查阅。

E
enternoder#3·9 年前

数据库读写分离的,可以使用第一种方式,如果没有,我建议用第二种方式,不过涉及到钱的,都需要有详细的日志记录,方便查询

S
sunkuo#4·9 年前

一般用redis或者消息队列产品来做这个事情,如果想保持最终一致性,需要维护的事情很多。可以借助后台任务系统如Kue来实现,我们公司在用。

B
budblack#7·9 年前

如果对时间要求不苛刻, 大约12小时. 可以用一个 agenda 来做每(半)小时检查

L
libook#8·9 年前

个人觉得方案1,及1楼、7楼的靠谱,初期可以先用这个,留足余地,后期对时效性要求高的话再换其他机制,后期有集中处理的需求也说不定。

Z
zy445566#9·9 年前

为什么要轮询?记个时间戳不行吗?用用户退款的时候的时间戳去减之前记录的时间戳,大于12小时就不给退,不就好了

N
NetLogoclub#10·9 年前

9楼,你要不去轮询,你怎么知道那个时间戳相减已经有大于12小时的情况@zy445566

A
axetroy#11·9 年前

@zy445566 要的就是自动化, 不管用户点不点退款, 超过12小时, 状态自动更改为 "不可退款"

W
wxs77577#12·9 年前

定时任务交给系统去做,linux的cron

参与回复
登录后即可参与回复。登录