zoukankan      html  css  js  c++  java
  • 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;
        }
     
    }
  • 相关阅读:
    zuanwenzhang
    win32 打印机api
    错误码linux
    sed的一个知识点
    linux 修改时区
    赵鹏雁?、、
    Linux下模块编译错误
    Android加速度传感器实现“摇一摇”,带手机振动 .
    Android百度地图基础实现(标记+GPS) .
    Android 中 getApplicationContext()、this、getApplication()之间的区别 .
  • 原文地址:https://www.cnblogs.com/yszr/p/10693420.html
Copyright © 2011-2022 走看看