网站首页> 文章专栏> 使用Redis实现购物车
使用Redis实现购物车
编辑时间:2018-11-01 12:52:33 作者:大蒜 浏览:4780 评论:0

使用Redis实现购物车功能

一般情况下购物车功能都是使用SESSION/COOKIE实现的,也就是将整个购物车数据都存储到SESSION中。这样做的好处就是不用操作数据库就可以实现,同时用户可以不同登录就可以将商品加入到购物车中,缺点就是1. 导致SESSION过于臃肿 2. SESSION数据默认是存储到文件中的,所以操作SESSION是相对比较慢的。 而将购物车数据存放到Redis中,可以加快购物车的读写性能,从而提高用户体验,缺点就是Redis数据是存放到内存,相对成本较高。但是这个成本,一般企业都可以接受。

核心代码如下

Cart.class.php代码

  redis = new Redis;
        $this->redis->connect('127.0.0.1', 6379);
    }

    public function addToCart($gid, $cartNum=1)
    {

        session_start();
        if ($gid 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; $iredis->hGetAll($k);
        }

        include './View/show.php';

    }

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