凯迪仕微信小程序
开发技术:Nacos + Seata + SpringBoot + SpringMVC + Mybatis + MySql + Redis
● 购物车模块:在这个模块当中,客户端频繁进行添加和删除,出于性能上的考虑,这里用到了Redis作为缓存,用户在增加和删除购物车信息的时候,都是把对应了信息放在了Hash类型的数据中,键值分别记录了该用户选中那的产品id和数量。
● 商品限时特卖模块:这个模块当中,在redis中设置了有限数量的特价产品的数量,而每个用户限购一份,这里用Hset的数据类型,记录限购成功的客户id,每次在抢购之前先验证该用户之前是否进行过抢购,如果已经有记录,则购买失败;此外在并发环境下,每次下单成功之后,限购的商品数量都要自减,这里有数据覆盖的问题,所以考虑用Redis的乐观锁机制处理。
● 订单模块:用户点击支付的时候,订单生成,这里订单状态有未支付、已支付、交易关闭这几种状态,当用户调用微信支付接口并支付成功的时候,更新订单状态为已支付;如果用户取消了支付,则订单状态为未支付,同时开启了一个TaskSchedule定时任务对象,如果用户在30分钟内没有完成支付,则更新订单状态为交易关闭;
● 支付模块:这里主要是调用了微信的支付接口,根据用户的参数如openid完成对接。这个在用户发起支付的时候,要远程调用购物车模块进行相应商品项的清除,之后生成订单的相关信息。
● 订单查询模块:这里主要是在后台管理系统中对订单的一些统计,这里常用的查询条件有订单号、日期、用户openid。订单表中的主键并不考虑用KDS+时间戳的方式,因为索引字段过大,会影响存储性能,这里考虑用自增的id序列作为主键,自增的索引存储也更加紧凑。优化查询方面,未订单号建立了单值索引,订单号也很长,主要是截取了前面的7位作为索引的键,因为统计过前7位分布比较均匀;