美文网首页
Tp6 通过redis打造高性能购物车

Tp6 通过redis打造高性能购物车

作者: HueyYao | 来源:发表于2020-11-21 22:00 被阅读0次

    Tp6 通过redis打造高性能购物车

    在默认已近安装好tp6项目的前提下进行(适合数据量不是超大类型的购物车功能实现)

    创建控制器Cart.php

    <?php
    namespace app\api\controller;
    use app\common\lib\Show;//添加的 类 用来返回显示错误或成功数据
    use app\BaseController;
    use app\common\business\Cart as CartBis;//业务层用来处理数据
    class Cart extends BaseController{
    }
    

    其次是添加对应的类用来返回提示信息

    <?php
    namespace app\common\lib;
    class Show{
    
        public static function success($data =[] , $message = "OK"){
            $result = [
                "status" => config("status.success"),
                "message" => $message,
                "result" => $data,
            ];
            return json($result);
        }
        public static function error($data =[] , $message = "error",$status = 0){
            $result = [
                "status" => $status,
                "message" => $message,
                "result" => $data,
            ];
            return json($result);
        }   
    }
    

    添加购车功能 在控制器中接收验证数据后 传递给business 层来处理数据

        public function add(){
            if(!$this->request->isPost()){
                return Show::error();
            }
            $id = input("param.id",0,"intval");//获取产品id
            $num = input("param.num",0,"intval");//获取产品数量
            if(!$id || !$num){
                return Show::error([],"参数不合法");
            }
            $this->userId = 6;//测试默认写死的 这个可以自行获取
            $res = (new CartBis())->insertRedis($this->userId,$id,$num);
            if($res == FALSE){
                return Show::error();
            }
            return Show::success($res);
        }
    

    业务层接收到控制器传递来的数据进行处理

    <?php
    namespace app\common\business;
    use think\facade\Cache;
    use app\common\lib\Key;//创建Key类来处理redis
    class Cart extends BusBase{
        public function insertRedis($userId , $id , $num){
            //通过产品id 获取商品对应的sku信息
            $goodsSku = (new GoodsSku())->getNormalSkuAndGoods();
            if(!$goodsSku){
                return false;
            }
            $data = [
                'title'=>$goodsSku['goods']['title'],
                "image"=>$goodsSku['goods']['recommend_image'],
                "num"=>$num,
                "goods_id" =>$goodsSku['goods']['id'],
                "create_time" =>time(),
            ];
            try {
                //使用 Cache::hSet 来使存储数据 可以在这里学习https://www.runoob.com/redis/hashes-hget.html
                $res = Cache::hSet(Key::userCart($userId),$id,json_encode($data));
            } catch (\Exception $e) {
                return FALSE;
            }
            return $res;
        }
    

    对应业务层用到的【类】 记录用户购物车redis的key

    <?php
    namespace app\common\lib;
    class Key{
        //记录用户购物车的redis key
        public static function userCart($userId){
            return config("redis.cart_pre").$userId;
        }
    }
    

    相关文章

      网友评论

          本文标题:Tp6 通过redis打造高性能购物车

          本文链接:https://www.haomeiwen.com/subject/fbqyiktx.html