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

  <?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();

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值