思路什麼的就不說了直接上結果
共使用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; }