首页 新闻 赞助 找找看

支付订单支付过程中应该在缓存中还是直接写进数据库?

0
[待解决问题]

做一个支付需求,其中超过30分钟未支付订单将自动取消。

然后会有这么几个场景:
1st:用户跳到支付宝(比如),然后喝茶去了,一个小时后回来,继续支付。支付成功,跳到网站验证(跟支付宝返回来的订单号、或者根据用户的uid取出Memcache缓存中的数据)是否支付成功
2st:用户就是矫情,在支付的时候把session给清空,用户的登录状态就没了,然后继续支付,支付宝返回网站。

那么问题来了....

1. 直接写进数据库
对于2st,你清空就清空,我反正有order_id,不管怎么样都是可以验证的,perfect!但是!30分钟取消未支付订单啊。那么就意味着用户如果不支付,那么数据库就会有一条废数据(暂时不考虑业务上的统计多少用户支付了,多少用户下单未支付的问题)。30分钟清空意味着:1. 写一个cron定时改变订单status为无效,2. 直接数据库删除这一条。这还不是问题,有些矫情的用户,偏偏喜欢刷爆你的单,就是不支付,默默的数据库就有一堆无效的垃圾数据。

2. 写进缓存
Memcache缓存一下,这就要考虑1st,用户喝了一杯茶30分钟之后,支付完成!跳转,发现数据没了!钱付了,订单没了!我靠!不能忍。

我暂时的选择是写进数据库,不知道各位大拿如何考虑.....小菜求指教

李珠刚的主页 李珠刚 | 菜鸟二级 | 园豆:210
提问于:2014-11-13 16:31
< >
分享
所有回答(9)
0

你想太多了.一定要往数据库写

吴瑞祥 | 园豆:29449 (高人七级) | 2014-11-13 16:42
1

比尔盖茨说过,任何一个成功的数据库后面,都有一堆无效的垃圾数据。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-11-13 17:07

盖茨真说过?求出处!

支持(0) 反对(0) os340223 | 园豆:5 (初学一级) | 2014-11-15 23:33
0

 数据库是肯定要存的,如果追去性能,内存里也可以存一份,但这涉及到数据同步的问题,推荐你去看看 淘宝技术这十年 这本书,里面讲了很多淘宝用到的数据

jerry128 | 园豆:31 (初学一级) | 2014-11-13 21:26
0

用mongodb存,我记得其有自动数据过期这么个设置

柒零壹 | 园豆:258 (菜鸟二级) | 2014-11-14 12:57
0

必需的数据库啊。只要是用户操作过的任何数据。都要保存,就算删除也不能做物理删除。只能做一个标记而以

Giant150 | 园豆:1165 (小虾三级) | 2014-11-14 17:30
0

同意,数据库记录全部用户行为。当然,根据业务需要,提取有效用户数据保存,并提供用户查询是正解!

我自横刀哈哈笑 | 园豆:202 (菜鸟二级) | 2014-11-17 09:39
0

我认为这种数据也是有效数据, 用户在网站上的任意行为都不是无效的

Amos_li | 园豆:297 (菜鸟二级) | 2015-03-13 11:23
0

当然是数据库啊,,

你上淘宝买东西不见吗?购物车里的东西还会不见?就算商品下架都还见

下单未付款的单也是要好几天才 归类为无效单 .

 

我不觉得这是垃圾数据,这些数据对卖家很有用的哦,这个数据可是宝贵着呢.

呵呵,,,,这代表了买家最近购物需求,现在没付款,不代表不想要,或许是有特殊原因没付款而已..有了这些数据可以按买家登陆做推荐商品~~~,扯得有点远了,,

 

总之,楼主,存数据库里吧,很重要

女子100 | 园豆:85 (初学一级) | 2016-01-05 09:34
0

订单取消了只是一个标志,如果付款了,在改订单状态不是很好。

唯我独萌 | 园豆:537 (小虾三级) | 2016-03-07 09:02

或者是支付完了在创建订单

支持(0) 反对(0) 唯我独萌 | 园豆:537 (小虾三级) | 2016-03-07 09:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册