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 array操作10个小技巧分享
Jun 23 PHP
ThinkPHP之R方法实例详解
Jun 20 PHP
PHP中使用TCPDF生成PDF文档实例
Jul 01 PHP
javascript+php实现根据用户时区显示当地时间的方法
Mar 11 PHP
php通过asort()给关联数组按照值排序的方法
Mar 18 PHP
PHP中生成UUID自定义函数分享
Jun 10 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
Jan 07 PHP
Yii2实现让关联字段支持搜索功能的方法
Aug 10 PHP
总结PHP中数值计算的注意事项
Aug 14 PHP
Lumen timezone 时区设置方法(慢了8个小时)
Jan 20 PHP
PHP+Ajax实现的博客文章添加类别功能示例
Mar 29 PHP
PHP rmdir()函数的用法总结
Jul 02 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下防止单引号,双引号在接受页面转义的设置方法
2008/09/25 PHP
Symfony实现行为和模板中取得request参数的方法
2016/03/17 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
PHP的消息通信机制测试实例
2016/11/10 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
php中用unset销毁变量并释放内存
2020/05/10 PHP
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
2009/11/04 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
分享jQuery插件的学习笔记
2016/01/14 Javascript
JS添加删除DIV的简单实例
2016/07/08 Javascript
angularjs+bootstrap菜单的使用示例代码
2017/03/07 Javascript
详解webpack+es6+angular1.x项目构建
2017/05/02 Javascript
React中使用UEditor百度富文本的方法
2018/08/22 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
2019/11/06 Javascript
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
python 上下文管理器使用方法小结
2017/10/10 Python
Flask模拟实现CSRF攻击的方法
2018/07/24 Python
python设置环境变量的原因和方法
2019/06/24 Python
Python 堆叠柱状图绘制方法
2019/07/29 Python
pytorch 加载(.pth)格式的模型实例
2019/08/20 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
一款利用html5和css3动画排列人物头像的实例演示
2014/12/05 HTML / CSS
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
数据库面试要点基本概念
2013/10/31 面试题
环境工程大学生个人的自我评价
2013/10/08 职场文书
旅游项目开发策划书
2014/01/18 职场文书
《和田的维吾尔》教学反思
2014/04/14 职场文书
2014年社区民政工作总结
2014/12/02 职场文书
客户答谢会致辞
2015/01/20 职场文书
团员个人年度总结
2015/02/26 职场文书
会计稽核岗位职责
2015/04/13 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书
再读《皇帝的新衣》的读后感悟!
2019/08/07 职场文书
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers