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 HTML代码串截取代码
Dec 29 PHP
常见的PHP五种设计模式小结
Mar 23 PHP
PHP版国家代码、缩写查询函数代码
Aug 14 PHP
有关php运算符的知识大全
Nov 03 PHP
PHP判断图片格式的七种方法小结
Jun 03 PHP
PHP添加图片水印、压缩、剪切的封装类
Aug 17 PHP
Symfony2安装的方法(2种方法)
Feb 04 PHP
PHP学习笔记之php文件操作
Jun 03 PHP
PHP版微信小店接口开发实例
Nov 12 PHP
PHP递归实现快速排序的方法示例
Dec 18 PHP
php操作mongodb封装类与用法实例
Sep 01 PHP
laravel 5.5 关闭token的3种实现方式
Oct 24 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中str_replace函数使用小结
2008/10/11 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
2014/07/15 NodeJs
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
JavaScript判断变量是否为空的自定义函数分享
2015/01/31 Javascript
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
在for循环中length值是否需要缓存
2015/07/27 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
用JS实现简单的登录验证功能
2017/07/28 Javascript
详解各版本React路由的跳转的方法
2018/05/10 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
nodejs dgram模块广播+组播的实现示例
2019/11/04 NodeJs
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
在vue中使用回调函数,this调用无效的解决
2020/08/11 Javascript
python 判断自定义对象类型
2009/03/21 Python
Python ORM框架SQLAlchemy学习笔记之关系映射实例
2014/06/10 Python
Python2.x利用commands模块执行Linux shell命令
2016/03/11 Python
Pandas:DataFrame对象的基础操作方法
2018/06/07 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
Selenium python时间控件输入问题解决方案
2020/07/22 Python
教师岗位职责范本
2013/12/29 职场文书
应届生简历中的自我评价
2014/01/13 职场文书
优秀团支部事迹材料
2014/02/08 职场文书
建设投标担保书
2014/05/13 职场文书
单位委托函范文
2015/01/29 职场文书
工作态度检讨书范文
2015/05/06 职场文书
假如给我三天光明:舟逆水而行,人遇挫而达 
2019/10/29 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
jquery插件实现图片悬浮
2021/04/16 jQuery
CSS3实现的文字弹出特效
2021/04/16 HTML / CSS
解决numpy和torch数据类型转化的问题
2021/05/23 Python