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 相关文章推荐
写一个用户在线显示的程序
Oct 09 PHP
FCKeditor添加自定义按钮
Mar 27 PHP
PHP学习笔记之二
Jan 17 PHP
php 伪造本地文件包含漏洞的代码
Nov 03 PHP
关于PHP结束标签的使用细节探讨及联想
Mar 04 PHP
php中如何使对象可以像数组一样进行foreach循环
Aug 09 PHP
php通过ksort()函数给关联数组按照键排序的方法
Mar 18 PHP
php对数组内元素进行随机调换的方法
May 12 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
Dec 28 PHP
Yii2框架实现注册和登录教程
Sep 30 PHP
PHP实现二维数组去重功能示例
Jan 12 PHP
PHP中实现中文字串截取无乱码的解决方法
May 29 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冒泡排序算法的深入理解
2013/06/09 PHP
PHP 验证登陆类分享
2015/03/13 PHP
如何在HTML 中嵌入 PHP 代码
2015/05/13 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
php对xml文件的增删改查操作实现方法分析
2017/05/19 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
2018/09/16 PHP
JQuery jsonp 使用示例代码
2009/08/12 Javascript
JQuery 操作/获取table具体代码
2013/06/13 Javascript
jquery封装的对话框简单实现
2013/07/21 Javascript
js window.print实现打印特定控件或内容
2013/09/16 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
浅谈angularJS2中的界面跳转方法
2018/08/31 Javascript
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
python 调试冷知识(小结)
2019/11/11 Python
神经网络训练采用gpu设置的方式
2021/03/03 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
车库门开启器、遥控器和零件:Chamberlain
2019/04/09 全球购物
法国在线药房:1001Pharmacies
2021/03/07 全球购物
怎么处理XML的中文问题
2015/03/26 面试题
新领导上任欢迎词
2014/01/13 职场文书
电大本科自我鉴定
2014/02/05 职场文书
环保建议书作文
2014/03/12 职场文书
广告语设计及教案
2014/03/21 职场文书
最新离婚协议书范本
2014/08/19 职场文书
“三支一扶”支教教师思想汇报
2014/09/13 职场文书
人事主管岗位职责
2015/02/04 职场文书
公司文体活动总结
2015/05/07 职场文书
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL
python turtle绘图命令及案例
2021/11/23 Python
前端实现滑动按钮AJAX与后端交互的示例代码
2022/02/24 Javascript
《雀魂PONG☆》4月1日播出 PV角色设定情报
2022/03/20 日漫
Python Django / Flask如何使用Elasticsearch
2022/04/19 Python
Tomcat弱口令复现及利用
2022/05/06 Servers