购物车管理包含功能:提交商品到购物车、显示购物车列表、删除购物车里商品、修改购物车、清空购物车等等

1、 购物车的实现方式:
① 可以把购物车的数据,给存储到 session 里面,一旦关闭浏览器,则商品数据就丢失;
②可以把购物车的数据,给存储到 cookie 里面,可以长久的保存购物车里面的数据;
③可以把购物车的数据,给存储到数据库里面,可以长久的保存购物车里面的数据;
④可以把购物车的数据,给存储到缓存里(memcache,redis),也可以长久的保存购物车的数据。

注:Session 可能会引起并发问题,如果脚本很短,这通常没有问题。但如果脚本运行时间比较长,那就可能会产生问题。在现代 Web 应用程序开发中,有一个非常常见的情况,就是使用 AJAX 技术在同一个页面内发送多个请求获取数据。

如果这些请求都需要使用Session,那么第一个请求到达服务器后会取得 Session 锁,其它请求就必须等待,所有请求将串行处理,即使它们彼此之间并没有依赖关系。这将大大增加页面的响应时间。

有一个方法可以避免这个问题,就是在使用完 Session 以后立即调用 session_write_close()方法关闭 Session。这样 Session 锁就会释放,即使当前脚本还在等在处理。需要注意的是,调用该方法后,当前脚本就不能进一步操作 Session 了

2、实例:京东购物车的设置,如果用户已经登录,则把购物车数据保存到数据库里面,如果没有登录,则把购物车的数据给保存到 cookie 里面,当登录时,要判断 cookie是否有购物车的数据,如果有,则把 cookie 里面的数据给移动到数据库里面。

3、提交商品到购物车:在前台模块里新建一个 CartController 控制器,添加 addCart方法

实现代码

<?php
namespace app\index\controller;use think\Controller;
use think\Validate;class Cart extends Controller
{private $redis = null;public function __construct()   //可以使用单例模式{$this->redis = new \Redis();$this->redis->connect('127.0.0.1','6379');}public function index(){$data = $_POST;//1.添加购物车操作测试/*  $rule0 = ['userid'=> "require|number",'goodid'=> "require|number",'goodname'=>"require"];$validate = new Validate($rule0);if ($validate->check($data)){$userid = $_POST['userid'];$goodid = $_POST['goodid'];$goodname = $_POST['goodname'];//添加购物车操作//$this->addcart($userid,$goodid,$goodname);//单独删除购物车商品//$this->removecart($userid,$goodid,$goodname);}else{echo $validate->getError();}*///2.获取购物车的所有商品$rule0 = ['userid'=> "require|number",];$validate = new Validate($rule0);if ($validate->check($data)){$userid = $_POST['userid'];//获取购物车商品操作//  $data = $this->getCartList($userid);            var_dump($data);$this->delcart($userid);}else{echo $validate->getError();}}/*** 添加购物车* @param $userid 用户id* @param $goodid 商品id* @param $goodname 商品名称* (购物车没有添加时间)*/public function addcart($userid,$goodid,$goodname){$hashKey = 'cart_'.$userid;  //hash名称$key = $goodid."_".$goodname; //hsah键名$this->redis->hincrby($hashKey,$key,1); //设置hash键名+1}/*** 用户清空购物车* @param $userid 用户id*/public function delcart($userid){$hashKey = 'cart_'.$userid;$this->redis->del($hashKey);}/***用户移除购物车中某件商品(可以根据商品id获取商品名称,这里为了方便)* @param $userid* @param $goodid*/public function removecart($userid,$goodid,$goodname){$hashKey = 'cart_'.$userid;  //hash名称$key = $goodid."_".$goodname; //hsah键名$this->redis->hdel($hashKey,$key);}/****/public function getCartList($userid){$hashKey = 'cart_'.$userid;  //hash名称$data = $this->redis->hGetAll($hashKey);return $data;}}

redis实现购物车相关推荐

  1. php cache缓存 购物车,Yii2使用Redis缓存购物车等数据

    服务器配置Redis Redis下载安装配置 wget http://download.redis.io/releases/redis-stable.tar.gz tar -xvf redis-sta ...

  2. Redis存储购物车

    1.1 Redis存储与获取购物车 redisTemplate.boundValueOps("cart_" + userId).get(); redisTemplate.bound ...

  3. php使用redis实现购物车功能,ThinkPHP5+Redis实现购物车

    本篇文章是通过ThinkPHP5和Redis实现购物车,功能包括:购物车列表.添加购物车.获取部分商品.获取部分商品总数量.获取全部商品总数量.商品减一.修改商品数量.删除商品.清空购物车,这些功能基 ...

  4. 使用Redis实现购物车、计数器、好/差评等功能测试【一看就懂】

    衔接上文:(若对Spring整合Redis还不太了解请参考) Spring整合Redis入门详解及基础练习_杨大仙爱篮球-CSDN博客 本文仅做功能测试,展示代码逻辑,后续会发布在项目中如何使用 . ...

  5. redis学习(五) redis实现购物车

    <redis实战> 第二章 每个用户的购物车都是一个散列,这个散列存储了商品ID与商品订购数量之间的映射 对商品数量的验证由web应用程序负责,我们要做的就是在商品订购的数量出现变化时,对 ...

  6. 基于Redis优化购物车 - 添加商品

    @ApiOperation(value = "添加商品到购物车", notes = "添加商品到购物车", httpMethod = "POST&qu ...

  7. 基于redis购物车java代码_基于redis实现购物车基本功能

    1.准备工作: 数据库表设计 (yj_product_specification:商品规格表,用户表,商品表等     {没有规格表,只有规格值表,}), 测试工具:POSTMAN redis客户端: ...

  8. 关闭浏览器 退出redis id_购物车增删改与清空,用Redis实现一下吧

    购物车管理包含功能:提交商品到购物车.显示购物车列表.删除购物车里商品.修改购物车.清空购物车等等 1. 购物车的实现方式: ① 可以把购物车的数据,给存储到 session 里面,一旦关闭浏览器,则 ...

  9. Redis保存购物车信息

    相关博客:https://hcshow.blog.csdn.net/article/details/118938917 原理 以客户id作为key,每位用户创建一个hash存储结构存储对应的购物车信息 ...

最新文章

  1. Linux学习笔记之文件管理和目录管理类命令
  2. 7.3 GROUP BY的“新”功能
  3. ACM基础题 - 求矩形个数
  4. POJ 1017 Packets【贪心】
  5. 实例12:python
  6. 查询商品列表报错This application has no explicit mapping for /error, so you are seeing this as a fallback
  7. app android切图工具,2018最强手机APP切图规范指南和切片要求
  8. 如何不运用第三方变量实现两个数的交换
  9. 引用饼图echarts_3D 饼图在 VUE 中的实现
  10. 快排算法的非递归实现
  11. 经典坦克大战——C++实现(附源码)
  12. Flutter FFI实践
  13. 今生,只想做一个平凡的人
  14. 计算机在智能制造专业中的应用,数控技术在智能制造中的应用及发展分析
  15. 职场历练【管理学之三】
  16. 关于罗德里格斯公式(Rodrigues‘sFormula)的详细推导过程
  17. 王开岭《精神明亮的人》|灵魂的萤火
  18. Redis是什么?看这一篇就够了
  19. GPS定位,经纬度附近地点查询–C 实现方法
  20. 图像拼接(十一):双摄像头实时拼接+stitching_detailed

热门文章

  1. c语言中调整颜色的函数_C语言中的输入输出函数
  2. php mssql image,linux+php连接mssql
  3. 飞飞php2.8采集失败_飞飞影视系统火车头采集器采集发布免登录接口
  4. debian部署mysql和tomcat_【超级详细】在Debian/kali/linux服务器下搭建Tomcat7+mysql+jdk8环境...
  5. 微软提出AdaLM,用于开发小型、快速且有效的领域预训练语言模型
  6. 全网首个OpenPrompt尝鲜报告:Prompt研究者必备实验利器
  7. 步入2021,大热的GNN会在哪些应用领域大展拳脚呢?
  8. IJCAI 2020 | 淡妆浓抹总相宜之人脸上妆
  9. HDU1247 字典树 Hat’s Words(Tire Tree)
  10. 打印Show Atend and Tell编码器的优化器