redis分页
模仿的https://www.cnblogs.com/dee0912/p/4612183.html
第一步连接redis后进行添加数据
require_once '../redis/redis.php';
$redis = new RedisDriver();
/*$result = $redis->getStr('userid');
var_dump($result) ;*/
//uid 自加
//当有 userid 这个键时,执行 incr时该键的值加1;不存在该键时,创建一个 userid,值为0,执行incr,值为1
/* for ($i=0; $i < 50; $i++) {
$uid = $redis->incrs('userid');
//向 hash 表中批量添加数据:hMset
$age = mt_rand(10,20);
$redis->setHash('user:'.$i, array('uid'=>$i, 'name'=>'name:'.$i, 'age'=>$age));
//把用户 id 存入链表
$redis->rpushs('uid', $i);
}
die;*/
第二部,从redis中查询数据进行分页
/*分页*/ //用户总数 $count = $redis->getListSize('uid'); //页大小 $pageSize = 5; //当前页码 $page = !empty($_GET['page'])?$_GET['page']:1; //页总数 $pageCount = ceil($count / $pageSize); //echo $count.'='.$page.'='.$pageCount;die; /* 第 1 页:lrange 0 4 第 2 页:lrange 5 9 第 3 页:lrange 10 14 第 n 页:lrange ($page - 1) * $pageSize ($page - 1) * $pageSize + ($pageSize - 1) */ $ids = $redis->lranges('uid', (($page - 1) * $pageSize), (($page - 1) * $pageSize + ($pageSize - 1))); /*echo "<pre>"; print_r($ids); die;*/ /* var_dump($ids); $page = 1 array(5) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" [3]=> string(1) "4" [4]=> string(1) "5" } */ foreach($ids as $k => $v){ $data[] = $redis->hgetalls('user:'.$v); } //$newArray1 = array_column($data,NULL,'uid'); ///array_column() 返回input数组中键值为column_key的列, 如果指定了可选参数index_key,那么input数组中的这一列的值将作为返回数组中对应值的键。 ?> <table border="1" cellspacing="0" cellpadding="5"> <tr> <th>uid</th> <th>name</th> <th>age</th> <th>操作</th> </tr> <?php foreach($data as $v){ ?> <tr> <td><?php echo $v['uid']?></td> <td><?php echo $v['name']?></td> <td><?php echo $v['age']?></td> <td><a >删除</a> | uid:<?php echo $v['uid'];?></td> </tr> <?php } ?> <tr><td colspan="4"> <a href="?page=<?php echo ($page-1)<=1?1:($page-1);?>">上一页</a> <a href="?page=<?php echo ($page+1)>$pageCount?$pageCount:($page+1);?>">下一页 </a> <a href="?page=1">首页</a> <a href="?page=<?php echo $pageCount;?>">尾页</a> 当前<?php echo $page;?>页 总共<?php echo $pageCount;?>页 共<?php echo $count;?>用户 </td> </tr> </table> </body> </html>
require_once '../redis/redis.php';上面引入的redis类
<?php /** * ------------------------------------------ * 统一redis的配置与数据存储规范,便于扩展与修改 * # redis通常用于热数据与消息列队等场景 * # list内存储array是采用json格式 * */ class RedisDriver { public $redis = null; public function __construct() { if (is_null($this->redis)) { $this->redis = new \Redis(); $this->redis->connect('127.0.0.1', '6379'); } } /**给key加一 * [incrs description] * @param [type] $key [description] * @return [type] [description] */ public function incrs($key) { $this->redis->incr($key); } // 设置一条String public function setStr($key, $text, $expire = null) { $key = 'string:' . $key; $this->redis->set($key, $text); if (!is_null($expire)) { $this->redis->setTimeout($key, $expire); } } // 获取一条String public function getStr($key) { $key = 'string:' . $key; $text = $this->redis->get($key); return empty($text) ? null : $text; } // 删除一条String public function delStr($key) { $key = 'string:' . $key; $this->redis->del($key); } // 设置一条Hash public function setHash($key, $arr, $expire = null) { $key = $key; $this->redis->hMset($key, $arr); if (!is_null($expire)) { $this->redis->setTimeout($key, $expire); } } public function hgetalls($key) { $arr = $this->redis->hgetall($key); return empty($arr) ? 'null' : $arr; } // 获取一条Hash,$fields可为字符串或数组 public function getHash($key, $fields = null) { $key = 'hash:' . $key; if (is_null($fields)) { $arr = $this->redis->hGetAll($key); } else { if (is_array($fields)) { $arr = $this->redis->hmGet($key, $fields); foreach ($arr as $key => $value) { if ($value === false) { unset($arr[$key]); } } } else { $arr = $this->redis->hGet($key, $fields); } } return empty($arr) ? null : (is_array($arr) ? $arr : array($fields => $arr)); } // 删除一条Hash,$field为字符串 public function delHash($key, $field = null) { $key = 'hash:' . $key; if (is_null($field)) { $this->redis->del($key); } else { $this->redis->hDel($key, $field); } } // 在Hash的field内增加一个值 (值之间使用“,”分隔) public function fieldAddVal($key, $field, $val) { $arr = $this->getHash($key, $field); if (!is_null($arr)) { $str = reset($arr); $arr = explode(',', $str); foreach ($arr as $v) { if ($v == $val) { return; } } $str .= ",{$val}"; $this->setHash($key, array($field => $str)); } else { $this->setHash($key, array($field => $val)); } } // 在Hash的field内删除一个值 public function fieldDelVal($key, $field, $val) { $arr = $this->getHash($key, $field); if (!is_null($arr)) { $arr = explode(',', reset($arr)); $tmpStr = ''; foreach ($arr as $v) { if ($v != $val) { $tmpStr .= ",{$v}"; } } if ($tmpStr == '') { $this->delHash($key, $field); } else { $this->setHash($key, array($field => substr($tmpStr, 1))); } } } // 设置表格的一行数据 public function setTableRow($table, $id, $arr, $expire = null) { $key = '' . $table . ':' . $id; $this->redis->hMset($key, $arr); if (!is_null($expire)) { $this->redis->setTimeout($key, $expire); } } // 获取表格的一行数据,$fields可为字符串或数组 public function getTableRow($table, $id, $fields = null) { $key = '' . $table . ':' . $id; if (is_null($fields)) { $arr = $this->redis->hGetAll($key); } else { if (is_array($fields)) { $arr = $this->redis->hmGet($key, $fields); foreach ($arr as $key => $value) { if ($value === false) { unset($arr[$key]); } } } else { $arr = $this->redis->hGet($key, $fields); } } return empty($arr) ? null : (is_array($arr) ? $arr : array($fields => $arr)); } // 删除表格的一行数据 public function delTableRow($table, $id) { $key = '' . $table . ':' . $id; $this->redis->del($key); } public function rpushs($key, $value) { $this->redis->rpush($key,$value); } public function lranges($key,$start,$end) { return $this->redis->lrange($key,$start,$end); } // 推送一条数据至列表,头部 public function pushList($key, $arr) { $key = 'list:' . $key; $this->redis->lPush($key, json_encode($arr)); } // 从列表拉取一条数据,尾部 public function pullList($key, $timeout = 0) { $key = 'list:' . $key; if ($timeout > 0) { $val = $this->redis->brPop($key, $timeout); // 该函数返回的是一个数组, 0=key 1=value } else { $val = $this->redis->rPop($key); } $val = is_array($val) && isset($val[1]) ? $val[1] : $val; return empty($val) ? null : $this->objectToArray(json_decode($val)); } // 取得列表的数据总条数 public function getListSize($key) { $key = $key; return $this->redis->lSize($key); } // 删除列表 public function delList($key) { $key = 'list:' . $key; $this->redis->del($key); } // 使用递归,将stdClass转为array protected function objectToArray($obj) { if (is_object($obj)) { $arr = (array) $obj; } if (is_array($obj)) { foreach ($obj as $key => $value) { $arr[$key] = $this->objectToArray($value); } } return !isset($arr) ? $obj : $arr; } }