分頁按頁碼讀取redis資料

守護大白菜發表於2017-03-18
<?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];
    }

相關文章