购物车功能的优化完善
来源:互联网 发布:阿里巴巴淘宝开店 编辑:程序博客网 时间:2024/06/05 05:40
购物车的功能实现,通常来说有三种方法。
1.用cookie实现购物车;
【缺点】:单纯有cookie实现购物车,这样的购物车不是很理想,设想一下,如果客户端的浏览器把cookie给禁用了,这种方法就会在这里挂掉。
2.用seeesion实现购物车;
【缺点】:session中保存购物车的信息,这个只是在一个会话中可用,如果用户没有登录,或者说登录了以后,添加购物车,在关闭浏览器或者登出后,之前所添加的购物车就只有挂掉了。
3.用cookie和数据库(购物车信息持久化)实现购物车;
主要的流程:
A.用户登录前的数据流:用户在没有登录系统的时候,对喜欢的商品进行添加购物车,那么这个时候,我们可以把购物车信息保存到cookie中,这里会涉及到cookie的添加,修改操作;也即如果之前在cookie中不存对应的cookie,则就对cookie进行添加操作。如果在cookie中存在对应的cookie,那么,这时候,就要对cookie进行修改操作了(这里涉及到用户对同一个商品进行多次添加购物车的情况)。
B.用户登录后的数据流:用户在登录后,系统首先做的第一件事就是去获取对应的cookies,如果存在相关的购物车cookies,那么就对该购物车信息进行相应用户User的持久化操作,要么添加,要么修改。(添加操作:该用户所对应的购物车如果没有相应的信息进行添加操作;修改操作:类似的,如果存在对应用户的购物车信息,就进行修改操作)。用户登录后,也可以进行购物车的添加操作,不过,这里不是添加到cookie中,而是直接持久化到数据库中。
注:用户登录后的数据都是和数据库打交道。
完善购物车功能:
1. cookie中的购物车数据格式改造直接将购物车数据保存到cookie中的问题: a)浏览器对cookie的大小限制,不能携带太多商品信息,不能满足用户需求 b ) 如果cookie中内容太多,http请求会携带cookie信息,影响请求的效率
改造:
之前cookie中的数据格式为json数据:
这个结构存在的问题:
1. a)商品的属性太多,只保存itemId,itemTitle等信息可以通过接口查询 b)从业务上理解,保存商品加入购物车时快照信息 c)由产品经理决定,将商品加入到购物车时是否要保存快照信息?2. 对商品的新增、删除、修改数量,每次都要将数据反序列化成List集合, 然后对集合遍历找出Cart对象,再做修改
解决问题:
1、 不能保存到cookie a) 保存到redis i. 性能高 ii. redis和cookie都有生存时间
2、 改造数据存储格式
a) 使用redis中的hash结构
当用户对商品添加、删除的时候,只需要通过cart_key获取id,操作id;更新商品时,通过id获取到json格式数据对其进行更新操作。
在商品详情页,加入购物车时的请求路径所对应的方法改造:
重点是改造cookie中的value,如下图
对应的逻辑,这是原始的,直接向cookie中写入商品详情:
目前,我们是将商品信息保存在cookie中的。
重构之后使用redis的Hash结构
修改未登录情况下的,信息保存:
RedisService 的 hget()方法,改造:
hset() :hash结构的设置值
hdel() :hash结构的删除数据
hgetAll():hash结构的查询所有数据
添加商品到购物车的代码重构:
显示购物车数据:
private static final Integer SECONDS = 60 * 60 * 24 * 30 (30天)
页面展示:
问题:
Redis中的key保存在客户端浏览器的cookie中,用户可以通过浏览器清空cookie,那么Redis中的数据就会长期保存在Redis中。
解决:
依据活跃度(查询频率)i. 记录数据的访问的最后时间ii. 根据当前时间和最后时间做比较,如果超过指定时间,则需要删除 this.redisService.hset(key ,"updated", String.valueOf(system.currentTimeMillis()));iii. 需要编写Quartz定时任务实现?TODO
redis中的数据查询:
页面结果:
用户操作购物车记录到cookie和redis的实现
一种情况是:一直访问购物车,处于活跃状态
一种情况是:一直访问网站,但是不访问购物车,假设访问商品详情页时刷新购物车cookie和redis数据,需要注册拦截器
注册拦截器
还有一种情况是:人为的将浏览器的cookie清空
a) 记录购物车数据的最后访问时间,后台任务扫描比对该数据,做数据清理 this.redisService.hset(key ,"updated", String.valueOf(system.currentTimeMillis()));
- 购物车功能的优化完善
- 功能完善--购物车
- servlet实现的一个购物车展示功能,待完善(添加,删除购物车等操作)
- 新版购物车类,加入查找功能以及完善错误处理功能
- 一个比较完善的PHP购物车类
- Xib和购物车UI界面的完善
- Swift 绘图板功能完善以及终极优化
- Swift 绘图板功能完善以及终极优化
- 百度音乐,购物车的全选功能
- Android 购物车功能的实现
- JavaScript购物车最基本的功能
- angularjs实现的购物车功能
- java 购物车功能的实现
- 淘宝购物车功能的实现
- AJAX实现购物车功能的思路
- angularjs实现购物车的一些功能
- 功能最完善的uboot
- 单链表的实现-功能完善
- Maven 项目自动编译
- iOS逆向工程(简单利用"dumpdecrypted"给ipa砸壳)
- Linux基础知识
- 数据库表,excel,cvs 联系人转vcf
- 程序员易混淆的10个基础概念
- 购物车功能的优化完善
- maven错误分析
- iOS获取当前的控制器
- neon介绍及建议
- L298N模块
- 2015年中国钢铁企业排名50强名单
- 打包iOS应用程序
- Linux下安装Tomcat服务器和部署Web应用
- Android平台架构及特性