redis的优化

注意: 先优化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,
    ]);
    
        将数据放入一个文件(默认放在了publicfile_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));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值