千家信息网

使用redis怎么实现一个购物车基本功能

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这篇文章给大家介绍使用redis怎么实现一个购物车基本功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.准备工作:数据库表设计 (yj_product_specificati
千家信息网最后更新 2025年02月04日使用redis怎么实现一个购物车基本功能

这篇文章给大家介绍使用redis怎么实现一个购物车基本功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

1.准备工作:

数据库表设计 (yj_product_specification:商品规格表,用户表,商品表等 {没有规格表,只有规格值表,}),

测试工具:POSTMAN

redis客户端:Redis Desktop Manager

其他的工具 我就不一 一说了 。

逻辑处理 :

购物车基本功能:

1.购物车列表

2.加入购物车

3.删除购物车某个商品

4.清空购物车

首先来分析一下加入购物车,这也是购物车中最难的功能(个人认为)

加入购物车时 我们要考虑到 对于一个客户来说 不同规格,不同商品 ,在内存中应该怎么处理 , 必要的几个参数 首先用户信息要得到(mem_Id),商品的信息(prd_id),商品所对应规格值的id,这个信息我们都要取到,我们还要考虑对于不同用户,不同的信息,在redis要怎么存储。redis的类型我就不在这里说了。我在redis做的划分是 以用户的id作为redis的key 当然对于不同商品来说 我们还要注意一个商品的不同规格,数量都是要区分的(我们是用hash来存储的),而且还是保证hash的key唯一。如果说我们把hash的key由商品id,规格值 等共同组成的话 那么这样的话 我们这样就可以很容易就区分的清楚。对于前端传过来的参数都是固定,所以我们直接用一个实体来接收

用debug看一下 这个cart里面是什么东西 注意看一下这个那个多信息拼装的

private void addCart(Member member, Cart cart) throws Exception {
// 监听当前登陆用户
Jedis jedis = jedisUtil.KEYS.watch("cart_" + member.getId());// 监听key
Transaction multi = jedis.multi(); // 用返回的jedis对象开启事务
String cartFiled = cart.getProductId() + "_" + cart.getSpecificationValueIds();
// 购物车对象字符串,查询到当前redis上这个规格的购物车信息
String cartStr = jedisUtil.HASH.hget("cart_" + member.getId(),cartFiled);
//将String类型转为Cart对象
Cart _cart = Cart.parseObject(cartStr);
// 购物车存在,商品数量做累加
if (_cart != null) {
Integer num = cart.getNumber();
_cart.setNumber(_cart.getNumber() + num);
_cart.setPrice(cart.getPrice());
_cart.setFullName(cart.getFullName());
_cart.setImage(cart.getImage());
} else{
_cart = cart;
}


// 一个用户一个购物车,一个商品规格对应一个购物车项,将购物车存到redis
multi.hset("cart_" + member.getId(), cartFiled, _cart.toJSONString());


// 获取事务执行结果,如果监听的mahjongXA的值发生改变事务会执行失败,返回null
List exec = multi.exec();
// 释放监听
jedisUtil.KEYS.unwatch(jedis);
// 当事务执行失败是重新执行一次代码
if (exec == null) {
addCart(member, cart);
}

}

在用户加入购物车的时候,我们需要先看一下 当前商品和规格 在redis里面是否已经存在 如果存在 就直接在数量上面加减 不存在的就直接加入就可以了

// 购物车存在,商品数量做累加
if (_cart != null) {
Integer num = cart.getNumber();
_cart.setNumber(_cart.getNumber() + num);
_cart.setPrice(cart.getPrice());
_cart.setFullName(cart.getFullName());
_cart.setImage(cart.getImage());
} else{
_cart = cart;

}

对于在用户在客户端操作方面来说 如果用户在前端连续点击 有可能造成并发,所以在加入购物车的时候我注意并发事件,redis为我提供了watch 我可以通过watch来监听 ,避免连续点击

当取redis缓存的时候,值发生改变的,watch下面的事物事件会中断,这样的话

exec对象就为null 就会去redis里面再去取一次。

对于购物车的删除和清空 就比较简单了 我们只要了解redis的存储 就可以轻松解决这两个功能。

当然 对于用户来说 分为登陆用户和未登陆用户。以上为登录用户,未登录用户的 需要先存cookie里面 当登陆的时候从cookie里面取出来。

关于使用redis怎么实现一个购物车基本功能就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

购物车 购物 用户 商品 规格 不同 信息 功能 监听 事务 对象 数量 时候 登陆 客户 存储 这样的话 事件 内容 前端 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 延吉大龙软件开发 联影软件开发电话面试 C软件开发技术高转专D卷 软件开发人员绩效改进计划 数据库求R的关键码 如何搭建分布式数据库 bp网络技术 精锐教育软件开发部门怎么样 数据库查询where 条件 怎么才能做网络安全员 网络安全法实施方案 火绒重置安全服务器时出现问题 制造业向软件开发转型 嘉兴可视化智慧医院软件开发 域管理服务器的功能 济南口碑好的服务器客服电话 网络安全防范措施8点 成都市公安网络安全在哪上班 银行做软件开发可以跳槽腾讯吗 软件开发好还是人工智能好 软件开发数据库总结报告 2018网络安全十大问题 无管理我的世界服务器有哪些 医院网络技术员证书 服务器轨道 宇信科技中国互联网排名 亚控科技广州分公司软件开发 厦门永得立互联网科技有限公司 新神魔大陆极地之夜是哪个服务器 金证股份支付软件开发
0