美文网首页
lunem与Laravel之利用Redis做分页

lunem与Laravel之利用Redis做分页

作者: 隔岸坐看云卷云舒 | 来源:发表于2019-03-26 11:51 被阅读0次

分页场景:
在平常我们都是利用数据库做分页,但在高并发,数据库可能就不能承载这样的压力,在高并发的场景下其实是不允许将请求直接打到数据库,那么可不可以用Redis做成缓存又做分页呢?

下面我们来尝试:
执行命令

conposer require predis/predis

创建控制器:

php artisan make:controller xxx

创建function

/*
    *author:MJ.shu
    *time 2017/11/7 下午10:40
    *All rights reserved
*/
const limit = 10;

function static test(string $key,int $page):array{
        $res_num = Redis::zcard($key);
        $max_page = ceil($res_num / self::limit);
        if( $max_page < $page){
            return ['code'=> 400,'msg'=>'page err','data'=>['result'=>[],'max_page'=>$max_page]];
        }
        $limit = (intval($page) * self::limit)-1;
        $data = Redis::ZRANGE($key,$start,$limit);
        $data = Redis::hmget('news',$data);
        foreach ($data  as $k=>$v){
            $v = json_decode($v,true);
            $new[] = $v;
        }
        return ['code'=>200,'data'=>['result'=>$new,'max_page'=>$max_page]];

第一步:

Redis::zcard($key);  //返回有序集 key 的基数。

第二步:

ceil($res_num / self::limit);  //计算总分页,数量/实现定义的常量

第三步:

//判断请求页数是否大于计算出的页数
if( $max_page < $page){
            return ['code'=> 400,'msg'=>'page err','data'=>['result'=>[],'max_page'=>$max_page]];
        }

第三步:
计算条数

 0 表示有序集第一个成员,所以要减1
$limit = (intval($page) * self::limit)-1;

第四步:

$data = Redis::ZRANGE($key,$start,$limit); //取得有序集合的值 ,有序集合里一般放的是数据id

第五步:

$data = Redis::hmget('news',$data); //从redis的hash表取得完整数据

第六步:

//循环结果集,将其解码,组成新的数组,最后响应API
foreach ($data  as $k=>$v){
          $v = json_decode($v,true);
          $new[] = $v;
      }
      return ['code'=>200,'data'=>['result'=>$new,'max_page'=>$max_page]];

相关文章

  • lunem与Laravel之利用Redis做分页

    分页场景:在平常我们都是利用数据库做分页,但在高并发,数据库可能就不能承载这样的压力,在高并发的场景下其实是不允许...

  • laravel温故

    数据库 快速入门 查询构造器 分页 数据库迁移 laravel数据填充 laravel的Redis使用 使用red...

  • laravel 接收参数进行分页

    本篇文章简单介绍利用laravel的Eloquent接收参数进行分页。文章基于laravel5.3的Eloquen...

  • Laravel 文章汇集

    LARAVEL .ENV文件配数组laravel redis操作大全laravel5篇之使用事务laravel多库...

  • laravel 分页 使用layui样式

    laravel分页自带的事bootsharp的分页样式个人更喜欢layui的分页样式,下面介绍如何在laravel...

  • Laravel 自定义分页类

    Laravel --实战篇 (自定义分页类) 前言 : Laravel框架中有封装好的分页类paginate方法,...

  • 数组或者对象分页

    有些数据需要进行手动分页,laravel自带的分页无法实现,可以用array_slice或者laravel集合的方...

  • laravel orm的坑

    坑:1.relationship分页问题laravel的relationship分页,在使用动态属性时,分页错误。...

  • laravel 自带分页与 groupBy共用

    对于laravel来说有很多自带功能,其中laravel的分页就很美观,但是在sql语句中使用groupBy和分页...

  • laravel 基础教程 —— 分页

    分页 简介 在其他框架中,分页通常是比较痛苦的。laravel 使其变的非常简单。laravel 可以根据当前页面...

网友评论

      本文标题:lunem与Laravel之利用Redis做分页

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