购物车的实现思想

该博客探讨了两种购物车实现方式:1) 使用cookie在本地保存购物车,适用于未登录用户,数据有效期为7天;2) 对于已登录用户,采用Redis缓存保存购物车,以实现永久存储并减少数据库I/O。登录后,通过同步代码将cookie中的购物车信息转移到Redis,并清空cookie。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、本地保存方式

我实现的购物车是不需要登录就可以添加商品到购物车那种,保存的方式为cookie,把购物车列表转成json串保存到cookie中,设置有效期为7天。


2、服务端保存方式(需要用户登录后

为了实现登录状态用户的购物车是永久保存的,我需要把购物车信息放到服务端,这里我选择的是把购物车放到了redis缓存中,而非数据库中,减少I/O操作。


3、查询方式

用户在登录状态,则操作的是redis缓存中的购物车信息,非登录状态,则操作的是cookie中的购物车信息。


4、同步方式(用户进行登录操作的时候

如何实现用户登录后把本地的购物车信息同步到服务端,我这里的思路是,用户一旦登录,则把cookie中的购物车和redis中同步,然后删除cookie中的购物车信息。


部分同步代码块:

//得到cookie中的购物车
		List<TbItem> cookieCart = getCartList(request);
		//得到缓存中的购物车
		String cartjson = jedisClient.hget(USER_CART_PREFIX, String.valueOf(user.getId()));
		List<TbItem> redisCart = JsonUtils.jsonToList(cartjson, TbItem.class);
		//用cookie中的每一个商品id 和redis中的商品id比较
		//id相同则redis中对应商品的数量相加 都不同则添加到redis购物车中
		for (TbItem tbItem : cookieCart) {
			boolean flag = false;
			for(TbItem item : redisCart){
				//缓存中和cookie中都有的商品
				if(tbItem.getId() == item.getId().longValue()){
					item.setNum(tbItem.getNum()+item.getNum());
					flag = true;
					break;
				}
			}
			//缓存中没有的商品
			if(!flag){
				redisCart.add(tbItem);
			}
		}
		//添加到缓存中
		jedisClient.hset(USER_CART_PREFIX, String.valueOf(user.getId()), JsonUtils.objectToJson(redisCart));



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值