PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例


Posted in PHP onAugust 04, 2018

本文实例讲述了PHP操作redis实现的分页列表,新增,删除功能封装类与用法。分享给大家供大家参考,具体如下:

<?php
/*
 * redis 分页数据类库
 */
class redisPage{
  protected $_redis;
  protected $_redis_ip = '127.0.0.1'; //ip
  protected $_redis_port = 6379; //端口
  protected $_redis_db = 0; //数据库号
  protected $_hash_prefix = 'my_data'; //前缀名称
  public function __construct($ip='',$port='',$db='',$hash_prefix=''){
    if($ip != '') $this->_redis_ip = $ip;
    if($port != '') $this->_redis_port = $port;
    if($db != '') $this->_redis_db = $db;
    if($hash_prefix != '') $this->_hash_prefix = $hash_prefix;
    $this->_redis = new Redis();
    $this->_redis->connect($this->_redis_ip, $this->_redis_port);
    $this->_redis->select($this->_redis_db);
  }
  /*
   * 添加记录
   * @param $id id
   * @param $data hash数据
   * @param $hashName Hash 记录名称
   * @param $SortName Redis SortSet 记录名称
   * @param $redis Redis 对象
   * @return bool
   */
  public function set_redis_page_info($id,$data){
    if(!is_numeric($id) || !is_array($data)) return false;
    $hashName = $this->_hash_prefix.'_'.$id;
    $this->_redis->hMset($hashName, $data);
    $this->_redis->zAdd($this->_hash_prefix.'_sort',$id,$id);
    return true;
  }
  /*
   * 获取分页数据
   * @param $page 当前页数
   * @param $pageSize 每页多少条
   * @param $hashName Hash 记录名称
   * @param $SortName Redis SortSet 记录名称
   * @param $redis Redis 对象
   * @param $key 字段数组 不传为取出全部字段
   * @return array
   */
  public function get_redis_page_info($page,$pageSize,$key=array()){
    if(!is_numeric($page) || !is_numeric($pageSize)) return false;
    $limit_s = ($page-1) * $pageSize;
    $limit_e = ($limit_s + $pageSize) - 1;
    $range = $this->_redis->ZRANGE($this->_hash_prefix.'_sort',$limit_s,$limit_e); //指定区间内,带有 score 值(可选)的有序集成员的列表。
    $count = $this->_redis->zCard($this->_hash_prefix.'_sort'); //统计ScoreSet总数
    $pageCount = ceil($count/$pageSize); //总共多少页
    $pageList = array();
    foreach($range as $qid){
      if(count($key) > 0){
        $pageList[] = $this->_redis->hMGet($this->_hash_prefix.'_'.$qid,$key); //获取hash表中所有的数据
      }else{
        $pageList[] = $this->_redis->hGetAll($this->_hash_prefix.'_'.$qid); //获取hash表中所有的数据
      }
    }
    $data = array(
      'data'=>$pageList, //需求数据
      'page'=>array(
        'page'=>$page, //当前页数
        'pageSize'=>$pageSize, //每页多少条
        'count'=>$count, //记录总数
        'pageCount'=>$pageCount //总页数
      )
    );
    return $data;
  }
  /*
   * 删除记录
   * @param $id id
   * @param $hashName Hash 记录名称
   * @param $SortName Redis SortSet 记录名称
   * @param $redis Redis 对象
   * @return bool
   */
  public function del_redis_page_info($id){
    if(!is_array($id)) return false;
    foreach($id as $value){
      $hashName = $this->_hash_prefix.'_'.$value;
      $this->_redis->del($hashName);
      $this->_redis->zRem($this->_hash_prefix.'_sort',$value);
    }
    return true;
  }
  /*
   * 清空数据
   * @param string $type db:清空当前数据库 all:清空所有数据库
   * @return bool
   */
  public function clear($type='db'){
    if($type == 'db'){
      $this->_redis->flushDB();
    }elseif($type == 'all'){
      $this->_redis->flushAll();
    }else{
      return false;
    }
    return true;
  }
}
//数据库
$host='localhost';
$user='root';
$psd='';
$dbname='china';
$link = @mysql_connect($host,$user,$psd);
mysql_select_db($dbname,$link);
mysql_query("set names utf8");
$SQL = "SELECT * FROM js_collection_node order by nodeid asc limit 100 ";
$query = mysql_query($SQL);
$redis = new redisPage('127.0.0.1',6379,0,'collection_node'); //实例化对象
$redis->clear(); //测试清空数据
while($info = mysql_fetch_assoc($query)){
  $redis->set_redis_page_info($info['nodeid'],$info); //插入数据
}
$redis->del_redis_page_info(array(61)); //删除数据
$data = $redis->get_redis_page_info(1,10,array('nodeid','name')); //获取分页数据
print_r($data);
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
在Windows版的PHP中使用ADO
Oct 09 PHP
php引用计数器进行垃圾收集机制介绍
Sep 19 PHP
php获取远程图片体积大小的实例
Nov 12 PHP
php过滤HTML标签、属性等正则表达式汇总
Sep 22 PHP
PHP实现获取中英文首字母
Jun 19 PHP
学习php设计模式 php实现享元模式(flyweight)
Dec 07 PHP
Yii中的cookie的发送和读取
Jul 27 PHP
thinkphp整合微信支付代码分享
Nov 24 PHP
PHP实现的超长文本分页显示功能示例
Jun 04 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
Oct 01 PHP
Laravel 读取 config 下的数据方法
Oct 13 PHP
php ZipArchive实现多文件打包下载实例
Oct 31 PHP
PHP一致性hash分布式算法封装类定义与用法示例
Aug 04 #PHP
PHP实现的函数重载功能示例
Aug 03 #PHP
thinkPHP5框架导出Excel文件简单操作示例
Aug 03 #PHP
PHP命名空间namespace及use的简单用法分析
Aug 03 #PHP
PHP后台实现微信小程序登录
Aug 03 #PHP
thinkPHP5框架闭包函数与子查询传参用法示例
Aug 02 #PHP
PHP实现的AES加密、解密封装类与用法示例
Aug 02 #PHP
You might like
php smarty模版引擎中的缓存应用
2009/12/02 PHP
php explode函数实例代码
2012/02/27 PHP
PHP自动重命名文件实现方法
2014/11/04 PHP
Laravel使用Queue队列的技巧汇总
2019/09/02 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
script的async属性以非阻塞的模式加载脚本
2013/01/15 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
jquery垂直公告滚动实现代码
2013/12/08 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
JS实现的数组全排列输出算法
2015/03/19 Javascript
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
JavaScript 过滤关键字
2017/03/20 Javascript
JS全角与半角转化实例(分享)
2017/07/04 Javascript
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
python中模块查找的原理与方法详解
2017/08/11 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
Python学习_几种存取xls/xlsx文件的方法总结
2018/05/03 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
使用python实现离散时间傅里叶变换的方法
2019/09/02 Python
python实现简单飞行棋
2020/02/06 Python
python实现感知机模型的示例
2020/09/30 Python
详解pycharm配置python解释器的问题
2020/10/15 Python
锐步美国官方网站:Reebok美国
2018/01/10 全球购物
心理学专业大学生职业生涯规划范文
2014/02/19 职场文书
爱祖国演讲稿
2014/05/04 职场文书
保护环境建议书400字
2014/05/13 职场文书
2015年初中元旦晚会活动总结
2014/11/28 职场文书
三十年同学聚会感言
2015/07/30 职场文书
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python
Python字符串常规操作小结
2022/04/03 Python
mysql sock 文件解析及作用讲解
2022/07/15 MySQL