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 相关文章推荐
PHP4实际应用经验篇(4)
Oct 09 PHP
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Oct 11 PHP
一个PHP的String类代码
Apr 20 PHP
php中去除所有js,html,css代码
Oct 12 PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
Nov 10 PHP
ThinkPHP 连接Oracle数据库的详细教程[全]
Jul 16 PHP
深入解析fsockopen与pfsockopen的区别
Jul 05 PHP
php通过字符串调用函数示例
Mar 02 PHP
PHP类中的魔术方法(Magic Method)简明总结
Jul 08 PHP
php中实现可以返回多个值的函数实例
Mar 21 PHP
thinkPHP中U方法加密传递参数功能示例
May 29 PHP
CI框架附属类用法分析
Dec 26 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 mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
php修改指定文件后缀的方法
2014/09/11 PHP
使用Thinkphp框架开发移动端接口
2015/08/05 PHP
php获取文件名称和扩展名的方法
2017/02/07 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
javascript实现密码验证
2015/11/10 Javascript
jquery实现一个简单的表单验证实例
2016/03/30 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
WEB开发之注册页面验证码倒计时代码的实现
2016/12/15 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
jQuery实现百度登录框的动态切换效果
2017/04/21 jQuery
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
浅谈vue中慎用style的scoped属性
2017/11/28 Javascript
浅谈angular4.0中路由传递参数、获取参数最nice的写法
2018/03/12 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
微信小程序实现发红包功能
2018/07/11 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
2018/11/27 Javascript
JavaScript中的 new 命令
2019/05/22 Javascript
Vue SSR 即时编译技术的实现
2020/05/06 Javascript
在Python web中实现验证码图片代码分享
2017/11/09 Python
Python中按值来获取指定的键
2019/03/04 Python
使用python批量转换文件编码为UTF-8的实现
2020/04/03 Python
Python使用pdb调试代码的技巧
2020/05/03 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
详解HTML5中rel属性的prefetch预加载功能使用
2016/05/06 HTML / CSS
PAUL HEWITT手表美国站:德国北部时尚生活配饰品牌,船锚元素
2017/11/18 全球购物
英国工艺品购物网站:Minerva Crafts
2018/01/29 全球购物
副总经理工作职责
2013/11/28 职场文书
总裁岗位职责
2013/12/04 职场文书
2014两会学习心得:榜样精神伴我行
2014/03/17 职场文书
幼儿园健康教育方案
2014/06/14 职场文书
欢迎标语大全
2014/06/21 职场文书