做一个支付需求,其中超过30分钟未支付订单将自动取消。
然后会有这么几个场景:
1st:用户跳到支付宝(比如),然后喝茶去了,一个小时后回来,继续支付。支付成功,跳到网站验证(跟支付宝返回来的订单号、或者根据用户的uid取出Memcache缓存中的数据)是否支付成功
2st:用户就是矫情,在支付的时候把session给清空,用户的登录状态就没了,然后继续支付,支付宝返回网站。
那么问题来了....
1. 直接写进数据库
对于2st,你清空就清空,我反正有order_id,不管怎么样都是可以验证的,perfect!但是!30分钟取消未支付订单啊。那么就意味着用户如果不支付,那么数据库就会有一条废数据(暂时不考虑业务上的统计多少用户支付了,多少用户下单未支付的问题)。30分钟清空意味着:1. 写一个cron定时改变订单status为无效,2. 直接数据库删除这一条。这还不是问题,有些矫情的用户,偏偏喜欢刷爆你的单,就是不支付,默默的数据库就有一堆无效的垃圾数据。
2. 写进缓存
Memcache缓存一下,这就要考虑1st,用户喝了一杯茶30分钟之后,支付完成!跳转,发现数据没了!钱付了,订单没了!我靠!不能忍。
我暂时的选择是写进数据库,不知道各位大拿如何考虑.....小菜求指教
你想太多了.一定要往数据库写
比尔盖茨说过,任何一个成功的数据库后面,都有一堆无效的垃圾数据。
盖茨真说过?求出处!
数据库是肯定要存的,如果追去性能,内存里也可以存一份,但这涉及到数据同步的问题,推荐你去看看 淘宝技术这十年 这本书,里面讲了很多淘宝用到的数据
用mongodb存,我记得其有自动数据过期这么个设置
必需的数据库啊。只要是用户操作过的任何数据。都要保存,就算删除也不能做物理删除。只能做一个标记而以
同意,数据库记录全部用户行为。当然,根据业务需要,提取有效用户数据保存,并提供用户查询是正解!
我认为这种数据也是有效数据, 用户在网站上的任意行为都不是无效的
当然是数据库啊,,
你上淘宝买东西不见吗?购物车里的东西还会不见?就算商品下架都还见
下单未付款的单也是要好几天才 归类为无效单 .
我不觉得这是垃圾数据,这些数据对卖家很有用的哦,这个数据可是宝贵着呢.
呵呵,,,,这代表了买家最近购物需求,现在没付款,不代表不想要,或许是有特殊原因没付款而已..有了这些数据可以按买家登陆做推荐商品~~~,扯得有点远了,,
总之,楼主,存数据库里吧,很重要
订单取消了只是一个标志,如果付款了,在改订单状态不是很好。
或者是支付完了在创建订单