redis实现购物车及订单支付功能
购物车及订单支付(redis):
关于购物车,我们当时考虑到怕水军来回CRUD(增读更删)购物车,对数据库造成巨大压力,当时决定采用redis来做这个购物车。
这个购物车当时想到了两种情况一种是淘宝的模式就是在用户在未登录状态下,可以查看商品,当在详情页点击“加入购物车”或者“查看购物车”的时候我们会判断用户是否登录,如果没有登录我们会弹出一个弹框,让用户先登录,成功后跳转到登录页面,并且把商品的信息传到后台,进行保存,如果用户是登录状态,直接将商品信息传到后台,进行保存。
另一种就是京东不管用户是否登录都可以添加和查看购物车,先将数据全部都保存在cookie中去,然后当用户登录上去以后就会直接将cookie中的信息保存在缓存中;
我们当时有这样一个考虑,就是第一个人在查看商品添加到了购物车,但是没有登录,只是保存在了cookie中,后来第二个人也来上jd,结果第一个人的购物车商品保存在了第二个人的账户中,存在弊端,最后我们还是选用了淘宝的模式;
在保存时候我们选择的是保存到redis缓存当中,将信息传到后台之后,我们会将数据全部都存放在一个对象当中,在将对象存放在list当中,然后以用户id(唯一标示)为键,list集合为值存放在缓存当中。
当用户有新的商品添加的时候,我们通过用户id查询出来原来的信息 ,将新的信息存放在list集合中去,然后将集合在放入缓存当中,但是这个过程中需要有一点注意的地方,就是当新添加的商品本来在购物中存在,这时我们就需要进行一个判断。如果存在我们只要在原来的基础上数量添加就行了;
购物车商品的删除,点击删除的时候,我们会将商品的id获取到,同时也获取到用户id,通过用户id查询出该用户的购物车商品,然后将要删除的商品从list集合当中删除掉,再保存回去;
之后当用户点击“提交订单”时会将redis中的信息取出来插入到数据库的订单表中,并清除reidis中该购物车的信息,同时将订单表中该条记录的状态设置为1(未付款),设置过期时间,在规定时间内用户可以选择进行支付,支付成功后会将订单的状态改为2,并将财付通返回的交易信息存入数据库的交易记录表中,同时调用webservice接口发送短信通知用户支付成功,此时的订单已进入后台去处理。
前台再查看订单时,如果在规定时间内,用户没有支付,我们会取消订单,这样是避免其他用户不能购买到商品,我们会根据状态显示不同的信息,比如:状态1是未支付订单,状态为2的是支付成功等待审核状态,当后台审核通过状态会改为3,当发货时状态会改为4,这时客户就可以确认收货,确认收货后状态改为5。
注意:订单支付采用的是 财付通(腾讯),支付宝(淘宝)
- 点赞
- 收藏
- 关注作者
评论(0)