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

	public void addCart(long itemId, int num, HttpServletRequest request) throws Exception {
		//获取要购买的商品信息 根据从前台传过来的itemId
		String 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 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 list = new ArrayList<>();
			list.add(cart);
			// 将购物信息存入到redis中
			jedisPoolDaoImpl.set(cartKey + tbUser.getId(), JsonUtils.objectToJson(list));
		}
	}

你可能感兴趣的:(带有redis缓存,添加购物车代码解析)