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

2020-11-21  本文已影响0人  HueyYao

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;
    }
}
上一篇下一篇

猜你喜欢

热点阅读