注意: 先优化redis 在使用ob缓存
redis 一句sql的优化
控制器
手动清缓存(清完就关了)
// Redis::flushall();
没有优化的sql
// $brand_jian = BrandModel::orderBy("add_time","desc")->limit(7)->get();
查询redis是否有数据
$brand_jian=Redis::get("brand_jian");
如果没有查询数据库,将数据放入到redis中
if(!$brand_jian){
$brand_jian = BrandModel::orderBy("add_time","desc")->limit(7)->get();
将查询的数据序列化
$brand_jian=serialize($brand_jian);
序列化之后的数据放入redis
Redis::setex('brand_jian',60*60*24,$brand_jian);
}
将数据反序列化渲染到展示页面
$brand_jian=unserialize($brand_jian);
ob缓存
控制器
随便起一个文件名
$filename="file_name.html";
检测该文件是否存在
if(file_exists($filename)){
将文件内容读取
$num=file_get_contents($filename);
将数据返回到视图页面
return $num;
}else{
开启ob缓存【obstart】
ob_start();
$aa= view('index.index',['cate_info'=>$cate_info,
"slide"=>$slide,
"brand_cateid"=>$brand_cateid,
]);
将数据放入一个文件(默认放在了public)
file_put_contents($filename,$aa);
return 返回视图
return $aa;
}
}
redis和ob缓存使用
随便起一个文件名
$filename="file_name.html";
if(file_exists($filename)){ //检测该文件是否存在
//将文件内容读取
$num=file_get_contents($filename);
//将数据返回到视图页面
return $num;
}else{
//开启 obstart
ob_start();
$cate_info=Redis::get('cate_info');
if(!$cate_info){
$cate_info=self::getleftInfo($res);
$cate_info=serialize($cate_info);
Redis::setex('cate_info',60*60*24,$cate_info);
}
$cate_info=unserialize($cate_info);
$aa= view('index.index',['cate_info'=>$cate_info]);
//将数据放入一个文件
file_put_contents($filename,$aa);
//return 返回视图
return $aa;
}
}
可以去public文件中查看那个文件
并起一个删除(文件)的定时任务
定时任务详情
ob缓存【俩中情况】写死与写活
首页一般 数据不会变好太大 所以我们就 【写死】
$filename="file_name.html";
而购物车 每个商品的id 都不一样 使用不能写死 【写活】
$filename="$id.html";
redis缓存【count的问题】
count(函数)【只能处理数组 】
而反序列化是字符串 ,
用expload (函数)【将字符串转化为数组】
- 例如:
$cart=Redis::get('cart');
if(!$cart){
$cart=Cary::where(["user_id"=>$user_id,"is_del"=>1])->get()
$cart=serialize($cart);
Redis::setex('cart',60*60*24,$cart);
}
$cart=unserialize($cart);
count 只能处理字符串 expload 将数组转化为字符串
$cart=count(explode(",",$cart));
- 拉取项目的代码:
scp -r root@00.000.00.00:/tmp/xiangmu.zip /data/wwwroot/
scp -r root@
00.000.00.00【ip号】
/tmp/xiangmu.zip【拉取的位置】
/data/wwwroot/【要放到的位置】
购物车优化思路
优化前:
// 登录后
// $buy_number = 1;
$goods = Goods::where("goods_id",$goods_id)->first();
// 判断库存
if($goods['goods_store']<$buy_number){
return $message=[
"code"=>00001,
"message"=>"库存不足",
"success"=>false,
];
exit;
}
$cart = Cary::where(["user_id"=>$user_id,"id"=>$sku_info['id'],"goods_id"=>$goods_id,"is_del"=>1])->first();
if($cart){
$buy_number = $cart->buy_number+$buy_number;
if($goods['goods_store']<$buy_number){
$buy_number = $goods->goods_store;
}
$res = Cary::where(["user_id"=>$user_id,"goods_id"=>$goods_id])->update(['buy_number'=>$buy_number,'add_time'=>time()]);
if($res){
return $message=[
"code"=>00001,
"message"=>"已加入购物车",
"success"=>true,
];
}
}else{
$data = [
"user_id"=>$user_id,
"goods_id"=>$request->goods_id,
"buy_number"=>$buy_number,
"add_time"=>time(),
"id"=>$sku_info['id'],
"goods_price_one"=>$sku_info['goods_price'],
];
$res2 = Cary::insert($data);
if($res2){
return $message=[
"code"=>00001,
"message"=>"已加入购物车",
"success"=>true,
];
}
}
}
优化后
$key='cary_'.$goods_id; //拼接一个前缀,还有商品id
$table_name="cary";//表名
$result=Redis::hget($key,"goods_id"); //判断是否为空,如果是空进行添加,如果有进行累加
if($result){
#进行累加
$number_redis= Redis::hget($key,"buy_number"); //取出数量
$number_redis=$number_redis+$buy_number;//缓存的数量与当前的数量进行相加
Redis::hset($key,"buy_number",$number_redis);
Redis::hset($key,"id",$sku_info['id']);
Redis::hset($key,"goods_price",$sku_info['goods_price']);
}else{
#进行添加
Redis::hset($key,"cary_id",$goods_id);
Redis::hset($key,"goods_name",$goods['goods_name']);
Redis::hset($key,"goods_id",$goods_id);
Redis::hset($key,"goods_img",$goods['goods_img']);
Redis::hset($key,"buy_number",$buy_number);
Redis::hset($key,"user_id",$user_id);
Redis::hset($key,"id",$sku_info['id']);
Redis::hset($key,"goods_price_one",$sku_info['goods_price']);
Redis::hset($key,"goods_price",$sku_info['goods_price']);
Redis::rpush($table_name,$key);//向队列里加值
// Redis::sadd($keys,"goods_id",$goods_id);
// Redis::rpush("user_info",$keys);
$new_res= Redis::lrange("cary",0,-1); //查出所有的值
}
//取出所有缓存值 Redis::hgetall($key)
// dd(Redis::hgetall($key));