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