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 addslashes 函数详细分析说明
Jun 23 PHP
PHP中json_encode、json_decode与serialize、unserialize的性能测试分析
Jun 09 PHP
php阻止页面后退的方法分享
Feb 17 PHP
7个鲜为人知却非常实用的PHP函数
Jul 01 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
Jul 01 PHP
PHP基于yii框架实现生成ICO图标
Nov 13 PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 PHP
ThinkPHP实现更新数据实例详解(demo)
Jun 29 PHP
php连接微软MSSQL(sql server)完全攻略
Nov 27 PHP
php对xml文件的增删改查操作实现方法分析
May 19 PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 PHP
浅析PHP数据导出知识点
Feb 17 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中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
PHP回调函数与匿名函数实例详解
2017/08/16 PHP
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
jQuery动画特效实例教程
2014/08/29 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
详解Vue中添加过渡效果
2017/03/20 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
在页面中引入js的两种方法(推荐)
2017/08/29 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
2017/10/11 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
nodejs实现的简单web服务器功能示例
2018/03/15 NodeJs
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
Python的mysql数据库的更新如何实现
2017/07/31 Python
Python的argparse库使用详解
2018/10/09 Python
如何利用Python模拟GitHub登录详解
2019/07/15 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
Python3使用 GitLab API 进行批量合并分支
2020/10/15 Python
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
Perfumetrader荷兰:香水、化妆品和护肤品在线商店
2017/09/15 全球购物
GIVENCHY纪梵希官方旗舰店:高定彩妆与贵族护肤品
2018/04/16 全球购物
夏威夷灵感服装及配饰:Reyn Spooner
2018/09/18 全球购物
如何开启linux的ssh服务
2013/06/03 面试题
标准毕业生自荐信范文
2013/11/04 职场文书
初一家长会邀请函
2014/01/31 职场文书
《商鞅南门立木》教学反思
2014/02/16 职场文书
2014年个人年终总结
2015/03/09 职场文书
2015教师年度考核评语
2015/03/25 职场文书
安全生产奖惩制度
2015/08/06 职场文书
python中print格式化输出的问题
2021/04/16 Python
javascript Number 与 Math对象的介绍
2021/11/17 Javascript
Python创建SQL数据库流程逐步讲解
2022/09/23 Python