Redis实现购物车

 2024-01-19 01:02:31  阅读 0

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

1.如何实现购物车:

① 里面可以存储购物车数据。 一旦浏览器关闭,商品数据将会丢失;

② 可以保存购物车中的数据,并长期保存购物车中的数据;

③购物车内的数据可存入数据库,购物车内的数据可长期保存;

④购物车数据可以保存在缓存(redis)中,购物车数据也可以长期保存。

注意:这可能会导致并发问题,如果脚本很短,这通常没有问题。 但如果脚本运行时间较长,则可能会出现问题。 在现代Web应用程序开发中,一种很常见的情况是使用AJAX技术在同一页面内发送多个请求来获取数据。

如果这些请求都需要使用,那么第一个请求到达服务器时将获取锁,其他请求将不得不等待,所有请求将被串行处理,即使它们彼此没有依赖关系。 这将显着增加页面的响应时间。

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

2. 示例:京东购物车设置。 如果用户登录,购物车数据将保存在数据库中。 如果用户未登录,购物车数据将保存在数据库中。 登录时需要判断是否有购物车。 如果有数据,则将里面的数据移动到数据库中。

3、提交商品到购物车:在前端模块新建控制器,添加方法

实现代码

<?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;
    }
}

标签: 购物车

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码