带有redis缓存,添加购物车代码解析

来源:互联网 发布:mac字体切换快捷方式 编辑:程序博客网 时间:2024/06/15 09:10
public void addCart(long itemId, int num, HttpServletRequest request) throws Exception {//获取要购买的商品信息 根据从前台传过来的itemIdString jsonItem = jedisPoolDaoImpl.get(itemKey+itemId);//将要购买的商品的数据从json转换成对象TbItemChild child = JsonUtils.jsonToPojo(jsonItem, TbItemChild.class);//因为要将购物车的信息存储到redis中,格式为cart:userId,//所以要获取当前登录用户的信息;登陆的信息格式为user:uuid,所以要获取当前登陆对象的uuid,从cookie中取;//登陆时存储cookie的代码如下://CookieUtils.setCookie(request, response, "TT_TOKEN", uuid);//由代码可知将该登陆用户的uuid存储在"TT_TOKEN";String uuid = CookieUtils.getCookieValue(request, "TT_TOKEN");//拿到该登陆用户的uuid后可以从redis获取该登陆用户的基本信息String jsonUser = jedisPoolDaoImpl.get(userKey+uuid);//将当前对象的数据从json转换成对象TbUser tbUser = JsonUtils.jsonToPojo(jsonUser, TbUser.class);//已获取到当前登陆对象//则此时购物车的在redis缓存中的key应为:cart:userId;-----cartKey+tbUser.getId()//判断该key是否存在,1.如果存在说明redis的购物缓存中有该用户的购物记录,2.如果不存在说明该用户为第一次登陆并添加购物车if(jedisPoolDaoImpl.exists(cartKey+tbUser.getId())){//key存在,此时为购物车中存在该用户购物的缓存记录//取出key,转换为List集合,将新的购物记录追加到数据中String jsonCart = jedisPoolDaoImpl.get(cartKey+tbUser.getId());if (jsonCart!=null && !"".equals(jsonCart)){List<Cart> list = JsonUtils.jsonToList(jsonCart, Cart.class);//判断购物车中是否有相同的商品如果有将该商品的数量修改,如果没有直接将该商品记录到缓存中去int index = -1;for (int i = 0; i < list.size(); i++) {if (list.get(i).getId() == itemId) {index = i;//有该商品。}}//循环遍历后如果index的值为-1则表示没有该商品,如果不为-1则表示有该商品if(index == -1){// redis购物车中没有该商品Cart cart = new Cart();cart.setId(child.getId());cart.setImages(child.getImages());cart.setNum(num);cart.setPrice(child.getPrice());cart.setTitle(child.getTitle());list.add(cart);}else{// redis购物车中有商品,对该商品数量进行修改,数量为前台传过来的数量Cart cart = list.get(index);cart.setNum(cart.getNum() + num);}// 将商品存入到redis中// 添加应该在 外层,购物车中有没有数据,都应该从新覆盖redis中的value。jedisPoolDaoImpl.set(cartKey + tbUser.getId(), JsonUtils.objectToJson(list));}//以上表示该redis缓存中存在该用的购物记录;}else{//如果redis缓存中不存在该用户的购物记录//则直接将信息添加到redis缓存中Cart cart = new Cart();cart.setId(child.getId());cart.setImages(child.getImages());cart.setNum(num);cart.setPrice(child.getPrice());cart.setTitle(child.getTitle());List<Cart> list = new ArrayList<>();list.add(cart);// 将购物信息存入到redis中jedisPoolDaoImpl.set(cartKey + tbUser.getId(), JsonUtils.objectToJson(list));}}

原创粉丝点击