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 相关文章推荐
提升PHP执行速度全攻略(下)
Oct 09 PHP
火车头discuz6.1 完美采集的php接口文件
Sep 13 PHP
PHP 面向对象实现代码
Nov 11 PHP
PHP 抓取网页图片并且另存为的实现代码
Mar 24 PHP
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
Jul 03 PHP
php 搜索框提示(自动完成)实例代码
Feb 05 PHP
php导入导出excel实例
Oct 25 PHP
YII中assets的使用示例
Jul 31 PHP
php实现将数组转换为XML的方法
Mar 09 PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
Jul 03 PHP
PHP封装的完整分页类示例
Aug 21 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 静态化实现代码
2009/03/20 PHP
基于PHP服务端图片生成缩略图的方法详解
2013/06/20 PHP
php调用C代码的实现方法
2014/03/11 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
Avengerls vs KG BO3 第二场2.18
2021/03/10 DOTA
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
window.onload追加函数使用示例
2014/03/03 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
node.js中的console.log方法使用说明
2014/12/09 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
jQuery的load()方法及其回调函数用法实例
2015/03/25 Javascript
jQuery实现鼠标划过添加和删除class的方法
2015/06/26 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
jQuery ajax提交Form表单实例(附demo源码)
2016/04/06 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
Vue.js实现的购物车功能详解
2019/01/27 Javascript
在Python中处理XML的教程
2015/04/29 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
一篇文章快速了解Python的GIL
2018/01/12 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
Python logging模块异步线程写日志实现过程解析
2020/06/30 Python
15个Pythonic的代码示例(值得收藏)
2020/10/29 Python
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
初级软件工程师面试题 Junior Software Engineer Interview
2015/02/15 面试题
百度JavaScript笔试题
2015/01/15 面试题
岗位职责的定义
2013/11/10 职场文书
技术总监个人的自我评价范文
2013/12/18 职场文书
电信营业员自我评价分享
2014/01/17 职场文书
品牌推广策划方案
2014/05/28 职场文书
国庆节活动总结
2014/08/26 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
2015年学校总务处工作总结
2015/05/19 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技