使用redis实现一个购物车功能

来源:互联网 发布:华工电路二端口ucd=0.1 编辑:程序博客网 时间:2024/05/01 17:40
  <?php//使用redis实现一个购物车功能class Cart{    /**     *  购物车有功能: 1、 将商品添加到购物车中  2、改变购物车商品数量  3、显示购物车的信息     *     *     * 将商品添加到购物车中功能分析如下:     * 1. 接收到商品ID     * 2. 根据商品ID查询商品信息     * 3. 将商品信息加入到购物车中     *     *         a. 判断购物车是否已有对应商品     *         b. 如果购物车中没有对应的商品,直接加入     *         c. 如果购物车中有对应的商品,只要修改商品数量     */    public function __construct()    {        //如果成员属性没有声明,默认就是公有属性        $this->redis = new Redis;        $this->redis->connect('127.0.0.1', 6379);    }    public function addToCart($gid, $cartNum=1)    {        session_start();        if ($gid <= 0) {            throw new Exception("请输入商品ID");        }        //根据商品ID查询商品数据        $goodData = $this->goodsData($gid);        $key = 'cart:'.session_id().':'.$gid;//id 说明:1、不仅仅要区分商品  2、 用户        // $data = $this->redis->hget($key, 'id');        $data = $this->redis->exists($key);        //判断购物车中是否有无商品,然后根据情况加入购物车        if (!$data) {            //购物车之前没有对应的商品的            //购物车的商品数量            $goodData['num'] = $cartNum;            //将商品数据存放到redis中hash            $this->redis->hmset($key, $goodData);            $key1 = 'cart:ids:set:'.session_id();            //将商品ID存放集合中,是为了更好将用户的购物车的商品给遍历出来            $this->redis->sadd($key1, $gid);        } else {            //购物车有对应的商品,只需要添加对应商品的数量            $originNum = $this->redis->hget($key, 'num');            //原来的数量加上用户新加入的数量            $newNum = $originNum + $cartNum;            $this->redis->hset($key, 'num', $newNum);        }    }    //显示用户购物车的所有商品    public function showCartList()    {        session_start();        $sessId = session_id();        $key = 'cart:ids:set:'.session_id();        //先根据集合拿到商品ID        $idArr =  $this->redis->sMembers($key);        for ($i=0; $i<count($idArr); $i++) {            $k  = 'cart:'.session_id().':'.$idArr[$i];//id             // echo $k,'<br/>';            $list[] = $this->redis->hGetAll($k);        }        var_dump($list);    }    public function goodsData($gid)    {        $goodsData = array(            1 => array(                'id' => 1,                'gname' => 'xxoo',                'price' => '1.5'            ),            2 => array(                'id' => 2,                'gname' => 'xxoo22',                'price' => '221.5'            ),            3 => array(                'id' => 3,                'gname' => 'xxoo33',                'price' => '331.5'            ),            4 => array(                'id' => 4,                'gname' => 'xxoo44',                'price' => '4441.5'            ),            );        return $goodsData[$gid];    }}$ceshi = new Cart();$ceshi->addToCart(2,2);echo session_id();

原创粉丝点击