我在之前的项目中,做过购物车的功能,当时从表设计到最后用postman进行接口的测试,都是我负责做的。
考虑到用户操作购物车的性能问题,我当时做的是基于redis的购物车,将购物车的所有数据都存储到redis中。
当时用了redis中的hash结构来存储所有用户购物车的数据,咱们都知道在使用hash的时候,涉及到key,field,value这三个方面的参数信息,key这块我用了 CartInfo/CartMap/CartData 这个固定的字符串来表示,在field这块为了能够表示不同用户的购物车,我用来 member:会员id:cart/member:会员id/cart:会员id 来表示,在value这块我是把会员对应的整个购物车的信息都转换为Json格式进行了存储。整个购物车对应的数据结构是这个样子的。
购物车中包含 商品总件数,总价格,以及 购物车的商品项列表,在商品项中包含 商品id,商品名,商品单价,商品件数,商品图片,商品小计 等,这里面特别要注意的就是关于价格这块在java中要用bigDecimal这个数据类型,这样可以防止精度丢失。
只有会员登录后才能操作购物车,比如添加商品,删除商品等。关于登录这块,我采用的是基于token的用户登录,类似于自己写了一个jwt【java web token】。
这样用起来更加的灵活方便,在自定义的拦截器中,当通过了层层关卡的验证后,将会员信息存入到request中,这样在其他的控制层方法中就可以通过request来获取当前登录的用户信息。为了方便在每个控制层方法中获取会员信息,我采用了 spring中自定义的参数解析器,这样就避免了在每个控制层方法中都使用requst.getA