redis数据处理完成类似分页

销售突然反映:用户导出企业客户数据,最多400条,并且都还一样??
APP里面用户可以选择的是100、200、300、500,结果选500的都是400条记录,且重复导出的数据竟然还一样!!

经查看分析:

企业客户导出问题归纳:

最多导出400条,是因为前端选择500,但实际请求是400,所以最大是400条

数据更新周期短,因此每天导出都是最新的400条,基本一样

解决方案:

由于前端APP目前不能新增分页,采取后台记录每个用户的搜索次数,达到可以循环获取该区域的所有数据。

++比如A用户,搜索上海市,第一次搜索获取1-400条,第二次搜索获取400-800条,依次,获取最后400条后,再次搜索,开始获取1-400条。++

客户搜索选择100,200,300,保持原有逻辑,获取最新的对应条数

客户选择500,后台强制每次给500条,按照类似分页,循环给出对应数据,以保证客户导出N次可以导出该区域的所有数据

最终效果

在这里插入图片描述

实现方法:

利用redis有序集合实现类分页数据查询,代码如下:

public function checkpage($mid,$city_id,$comp,$ismax){
        $redis = new \Redis;
        $redis->connect('127.0.0.1', '6379');
        $redis->auth('test@test.com');
        switch ($comp){
            case '0':
                $search = 0;
                break;
            case '电子商务':
                $search = 1;
                break;
            case '实业':
                $search = 2;
                break;
            case '贸易':
                $search = 3;
                break;
            case '科技':
                $search = 4;
                break;
            case '餐饮':
                $search = 5;
                break;
            case '广告':
                $search = 6;
                break;
            default:
                $search = 0;
        }
        $name = "page_".$mid;
        $v = "ser_".$city_id.$search."_ser";
        if($ismax==1){
            //重新赋值为 1
            $redis->zAdd($name,1,$v);
            $page = 1;
        }else{
            $is = $redis->exists($name);
            if($is ==1){
                //已经存在记录
                $redis->zIncrBy($name,+1,$v);
                $page = $redis->zScore($name,$v);

            }else{
                //第一次
                $redis->zAdd($name,1,$v);
                $page = 1;
            }
        }
        return $page;
    }

搜索次数和页数相结合,当返回的page大于总的页数时,要进行更新score的值

$is=0;
$page = $this->checkpage($mid,$city_id,$comp,$is);
 //获取总页数
 $total = Db::name('cuss')
          ->where($w)
          ->count('id');
$total_page = $total%500?$total/500+1:$total/500;
if($page==$total_page){
   $page=$total_page;
}elseif ($page > $total_page){
  //重新设置 页数为1
  $is=1;
  $this->checkpage($mid,$city_id,$comp,$is);
  $page=1;
}
$offset=($page-1)*500;

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值