Redis 實現分頁排序功能--文件系統業務核心功能

思路什麼的就不說了直接上結果
共使用redis四個命令:Hmset、Zadd、Zrange、Zrevrange;
Hmset:將數據存儲在hash數據結構裏
Zadd :將數據存儲在有序集合裏面
Zrange:取出有序集合區間內的值(成員),根據分數值從小到大排序
Zrevrange:取出有序集合區間內的值(成員),根據分數值從大到小排序redis

上代碼:緩存

/**
     * 設置redis緩存
     * @param $id
     * @param $data
     * @return bool
     */
    public function setRedisInfo($id, $data)
    {
        $redis = new redis();
        if (isset($id) && isset($data)) {
            //存儲數據
            $redis->hMSet($id, $data);
            //根據id排序
            $redis->zAdd('zadd:file', $id, $id);
            //根據updated_at 排序
            $redis->zAdd('zadd:file:updated_at', $data['updated_at'], $id);
            //根據文件大小排序
            $redis->zAdd('zadd:file:file_size', $data['file_size'], $id);
        }
        return false;
    }
/**
     * 獲取緩存
     * @param $page
     * @param $pagesize
     */
    public function getRedisInfo($page, $pagesize)
    {
        $redis = new redis();
        if (isset($page) && isset($pagesize)) {
            //分頁設置
            $li_start = ($page - 1) * $pagesize;
            $li_end = $li_start + $pagesize;
            //根據id從小到大排序獲取數據
            $id_arr = $redis->zRange('zadd:file', $li_start, $li_end);
            //根據id從大到小排序獲取數據
            $id_arr = $redis->zRevRange('zadd:file', $li_start, $li_end);
            //根據updated_at從小到大排序獲取數據
            $id_arr = $redis->zRange('zadd:file:updated_at', $li_start, $li_end);
            //根據updated_at從大到小排序獲取數據
            $id_arr = $redis->zRevRange('zadd:file:updated_at', $li_start, $li_end);
            ....
            if ($id_arr) {
                $list = [];
                foreach ($id_arr as $v) {
                    $list[] = $redis->hGetAll($v);
                }
                return $list;
            }
            return false;
        }
        return false;
    }
/**
     * 刪除緩存
     */
    public function delRedis($id)
    {
        if (isset($id))
        
            $redis = new redis();
            $redis->zRem('zadd:file', $id);
            $redis->zRem('zadd:file:updated_at', $id);
            $redis->del($id);
            
            return true;
        }
        return false;
    }
相關文章
相關標籤/搜索