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 相关文章推荐
海河写的 Discuz论坛帖子调用js的php代码
Aug 23 PHP
在PHP中使用模板的方法
May 24 PHP
PHP $_FILES中error返回值详解
Jan 30 PHP
php数组去除空值函数分享
Feb 02 PHP
THINKPHP支持YAML配置文件的设置方法
Mar 17 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
Feb 26 PHP
php版微信公众平台之微信网页登陆授权示例
Sep 23 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
Nov 21 PHP
php实现的错误处理封装类实例
Jun 20 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 PHP
php中输出json对象的值(实现方法)
Mar 07 PHP
Django 标签筛选的实现代码(一对多、多对多)
Sep 05 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中路径问题的解决方案
2006/10/09 PHP
自定义PHP分页函数
2006/10/09 PHP
深入解析php之apc
2013/05/15 PHP
PHP中include与require使用方法区别详解
2013/10/19 PHP
PHP设置头信息及取得返回头信息的方法
2016/01/25 PHP
PHP实现图片批量打包下载功能
2017/03/01 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
jquery遍历input取得input的name
2009/04/27 Javascript
javascript hasFocus使用实例
2010/06/29 Javascript
读jQuery之十二 删除事件核心方法
2011/07/31 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
2016/11/27 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
js实现飞机大战游戏
2020/08/26 Javascript
vue实现树状表格效果
2020/12/29 Vue.js
Python urlopen 使用小示例
2008/09/06 Python
Python实现视频下载功能
2017/03/14 Python
django 实现电子支付功能的示例代码
2018/07/25 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
pytorch masked_fill报错的解决
2020/02/18 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
大四学生毕业自荐信
2013/11/07 职场文书
医药专业推荐信
2013/11/15 职场文书
详细的大学生创业计划书模板
2014/01/27 职场文书
学雷锋志愿服务月活动总结
2014/03/09 职场文书
公司门卫岗位职责范本
2014/07/08 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
2015年世界粮食日演讲稿
2015/03/20 职场文书
学习雷锋主题班会
2015/08/14 职场文书
中国古风插画师排行榜:夏达第一,第三是阴阳师姑获鸟皮肤创作者
2022/03/18 国漫
MySQL 字符集 character
2022/05/04 MySQL
js 实现验证码输入框示例详解
2022/09/23 Javascript
MySQL深分页问题解决思路
2022/12/24 MySQL