电子商务网站功能,设计企业网站步骤,竞价推广的企业,拉新app推广平台排名目录
1.购物车常见的实现方式
2.购物车数据结构介绍
3.实例分析
1.controller层
2.service层 1.购物车常见的实现方式 方式一#xff1a;存储到数据库 性能存在瓶颈方式二#xff1a;前端本地存储 localstorage在浏览器中存储 key/value 对#xff0c;没有过期时间。s…
目录
1.购物车常见的实现方式
2.购物车数据结构介绍
3.实例分析
1.controller层
2.service层 1.购物车常见的实现方式 方式一存储到数据库 性能存在瓶颈方式二前端本地存储 localstorage在浏览器中存储 key/value 对没有过期时间。sessionstorage在浏览器中存储 key/value 对在关闭会话窗口后将会删除这些数据。方式三后端存储到缓存-redis 可以开启AOF持久化防止重启丢失推荐方式四后端存储到缓存-redis并同步更新到数据库 缓存和数据库的一致性加了用户唯一标识后没高并发操作同一数据的场景 2.购物车数据结构介绍 1.一个购物车中存在多个购物项2.使用双层MapMapString,MapString,String 第一层map的key表示用户id第二层map的key表示商品id3.对应的reids使用hash结构 3.实例分析
1.controller层 ApiOperation(添加到购物车)PostMapping(/add)public JsonData addToCart(ApiParam(购物的商品) RequestBody CartItemRequest cartItemRequest){cartService.addToCart(cartItemRequest);return JsonData.buildSuccess();}
2.service层
使用redis的hash结构模式进行存储 1.根据拦截器获取用户id2.根据id拼接key3.根据key创建hash结构的购物车4.根据商品id查询购物车中是否存在 5.1若不存在-添加商品到购物车 6.根据商品的id获取指定商品的详情7.创建商品并添加需要的信息8.以商品的id为键以商品为值转化为json字符串缓存到redis中4.2.若存在-修改购买的数量 6.根据key获取到的value反转json获取到商品7.修改购买的数量原本数量购买的数量8.以商品的id为键以商品为值转化为json字符串缓存到redis中 Slf4j
Service
public class CartServiceImpl implements CartService {Autowiredprivate RedisTemplate redisTemplate;Autowiredprivate ProductService productService;/*** 添加商品到购物车** param cartItemRequest*/Overridepublic void addToCart(CartItemRequest cartItemRequest) {//1.获取商品信息Long productId cartItemRequest.getProductId();Integer buyNum cartItemRequest.getBuyNum();//2.根据用户id获取购物车BoundHashOperationsString, Object, Object myCart getMyCartOps();//3.根据商品id的key获取缓存中valueObject cacheObj myCart.get(productId);String result ;if (cacheObj ! null) {result (String) cacheObj;}//4.判断缓存中是否存在商品if (StringUtils.isBlank(result)) {//5.1若不存在添加商品到购物车//6.创建购物商品CartItemVo cartItemVo new CartItemVo();//7.获取商品详情ProductVo productVo productService.detail(productId);if (productVo null) {throw new MyException(CodeEnum.CART_FAIL);}//8.根据商品详情获取指定信息cartItemVo.setAmount(productVo.getAmount());//获取商品的价格cartItemVo.setBuyNum(buyNum);//获取买的数量cartItemVo.setProductId(productId);//商品的idcartItemVo.setProductImg(productVo.getCoverImg());//商品图片cartItemVo.setProductTitle(productVo.getTitle());//商品标题//9.以商品id为键以根据id获取的商品对象为值转换为json字符串存放到redis中myCart.put(productId, JSON.toJSONString(cartItemVo));} else {//5.2若存在修改商品数量//6.根据key值转换为商品类型在获取CartItemVo cartItemVo JSON.parseObject(result, CartItemVo.class);//7.修改买的数量原本后买的cartItemVo.setBuyNum(cartItemVo.getBuyNum() buyNum);//8.重新放回myCart.put(productId, JSON.toJSONString(cartItemVo));}}/*** 使用redis中的hash结构** return*/private BoundHashOperationsString, Object, Object getMyCartOps() {//1.获取购物车keyString cartKey getCartKey();return redisTemplate.boundHashOps(cartKey);}/*** 根据用户id创建购物车的key* 购物车key** return*/private String getCartKey() {LoginUser loginUser LoginInterceptor.threadLocal.get();String cartKey String.format(CaptchaKey.CART_KEY, loginUser);return cartKey;}
}