分页按页码读取redis数据

来源:互联网 发布:egress软件 编辑:程序博客网 时间:2024/05/29 16:47
<?php
    /**
     * 按指定页码查找列表(按页码分页)
     * @param string     $key_list      redis KEY
     * @param int       $page           指定的页码
     * @param int       $pagesize       查找数量
     * @param string    $order          排序规则 desc:倒序  asc:升序
     * @return array
     */
    public static function forum_redis_get_sort_sets_list_v1($key_list, $page, $pagesize = 10, $order='desc')
    {
        $listlen = self::Redis()->executeCommand('ZCARD',[$key_list]);
        $page = $page>1 ? $page : 1 ;
        //注:正序读取时第一页起始位置是$start=0   倒序读取时第一页起始位置是$start=-1
        $start = intval(($page-1)*$pagesize+1);
        $end = intval(($page-1)*$pagesize + $pagesize);
        //是否有下一页   默认1(有下一页)
        $status = 1;

        if ($order=='desc'){

            //倒序

            if($end>=$listlen){
                //最后一页
                $start = -$start;
                $end = -$listlen;
                $id_list = self::Redis()->executeCommand('ZRANGE',[$key_list, $end,$start]);
                $status = 0;
            }else{
                $start = -$start;
                $end = -$end;
                $id_list = self::Redis()->executeCommand('ZRANGE',[$key_list, $end, $start]);
            }
            $id_list = array_reverse($id_list);

        }else{

             //正序

            if($end>=$listlen){
                //最后一页
                //$start = $start;
                $end = $listlen;
                $id_list = self::Redis()->executeCommand('ZRANGE',[$key_list,$start, $end]);
                $status = 0;
            }else{
                //正序读取  $start 从0开始
                $start = 0;
                $id_list = self::Redis()->executeCommand('ZRANGE',[$key_list,$start, $end]);
            }
        }
        return ['list' => $id_list, 'status' => $status, 'total' => $listlen];
    }
1 0
原创粉丝点击