首页 > 数据库 >PHP+Redis实现分页

PHP+Redis实现分页

时间:2022-11-25 12:05:52浏览次数:44  
标签:hash 分页 Redis redis db prefix PHP data page


废话少说,上代码吧

<?php


class RedisPage {
protected $_redis;
protected $_redis_ip ;
protected $_redis_port ;
protected $_redis_db ;
protected $_hash_prefix;

/**
* RedisPage constructor.
* 初始化redis配置
*/
public function __construct($ip = '',$port=6379,$db = 0,$hash_prefix = ''){
$this->_redis_ip = $ip ? $ip : '127.0.0.1';
$this->_redis_port = $port ? $port : 6379;
$this->_redis_db = $db ? $db : 0 ;
$this->_hash_prefix = $hash_prefix ? $hash_prefix : '';
//实例化redis数据库连接
$this->_redis = new Redis();
$this->_redis->connect($this->_redis_ip,$this->_redis_port);
$this->_redis->select($this->_redis_db);
}

/**
* @notes: 设置分页数据至redis数据库
* 采用hash table 与 集合 Score字段
* @auther: assasin >
* @dateTime: 2022/04/15 10:36
*/
public function set_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;
}

/**
* @notes:获取分页数据
* @auther: assasin
* @dateTime: 2022/04/15 10:42
*/
public function get_page_info($page,$pageSize,$key = []){
if(!is_numeric($page) || !is_numeric($pageSize)) return false;
$limit_s = ($page - 1) * $pageSize;
$limit_e = ($limit_s + $pageSize) - 1;
//获取在该区间内所有带 score 的有序集合成员列表
$range = $this->_redis->zRange($this->_hash_prefix.'_sort',$limit_s,$limit_e);
$count = $this->_redis->zCard($this->_hash_prefix.'_sort'); //统计总数
$pageCount = ceil($count / $pageSize); //总页数

$page_data = [];
foreach($range as $item){
if(count($key) > 0){
$page_data[] = $this->_redis->hMGet($this->_hash_prefix.'_'.$item,$key); //获取hash table 中所有的集合数据
}else{
$page_data[] = $this->_redis->hGetAll($this->_hash_prefix.'_'.$item);
}
}

$return_data = [
'data' => $page_data, // 返回的数据
'page' => $page, //当前页
'pageSize' => $pageSize, //每页的记录数
'total' => $count, //总条目数
'pageCount' => $pageCount, //总页数
];

return $return_data;

}

/**
* @notes:删除记录
* @auther: assasin <>
* @dateTime: 2022/04/15 10:54
*/
public function del_page_info($id){
if(!is_array($id)) return false;
foreach($id as $val){
$hashName = $this->_hash_prefix.'_'.$val;
$this->_redis->del($hashName);
$this->_redis->zRem($this->_hash_prefix.'_sort'.$val);
}
return true;
}

/**
* @notes: 0:清空当前数据库 -1:清空所有数据库
* @auther: assasin
* @dateTime: 2022/04/15 10:57
*/
public function clear_db($db = 0){
if ($db >= 0 ) {
$this->_redis->flushDB();
}elseif ($db == -1 ){
$this->_redis->flushAll();
}else{
// 非法数据库参数
return false;
}
return true;
}
}


// MySQL数据库查询
$conn = mysqli_connect('127.0.0.1','root','a12345');

mysqli_select_db($conn,'chainpos');
mysqli_query($conn,"set names utf8");
$sql = "SELECT did,dish,sno FROM o_dish ORDER BY did LIMIT 100 ";
$query = mysqli_query($conn,$sql);
$redis = new Redispage('127.0.0.1',6379,0,'assasin');
//$redis->clear_db(0);die;
while($info = mysqli_fetch_assoc($query)){
$redis->set_page_info($info['did'],$info); //插入数据
}
$redis->del_page_info(array(0)); //删除数据
$data = $redis->get_page_info(1,10,array('did','dish','sno')); //获取分页数据
echo "<pre>";
print_r($data);

标签:hash,分页,Redis,redis,db,prefix,PHP,data,page
From: https://blog.51cto.com/u_13940603/5886198

相关文章

  • Redis 锁的使用
    <?php/***RedisdistributedlocksinPHP*@authorassasin<>*/classRedisLock{private$retryDelay;private$retryCount;private$clockDriftFactor......
  • PHP文件日志记录
    <?php/***@notes:Logging*@auther:BinShi*@dateTime:2020/05/1317:44*/classLogging{/***进程唯一ID**@varstring*/priva......
  • 安装php环境
    环境:192.168.11.20PHP(主机名)PHP节点关闭防火墙配置好yum源用centos7.5-1804(1)安装配置基础服务[[email protected]]#yuminstall-ygccgcc-c++libxml2-......
  • docker-compose之redis cluster模式
    一、docker容器化的rediscluster最难搞的就是网络问题,这边记录一下集群搭建过程。二、dockerfileFROMredis:5.0.14MAINTAINERxbdRUNln-sf/usr/share/zo......
  • 安装php7.2
    #方法一:rpm-Uvhhttps://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpmrpm-Uvhhttps://mirror.webtatic.com/yum/el7/webtatic-release.rpm#......
  • 分页查询 —— 二次查询法
    数据准备t_order_1:[1,3,5,7,9,11,13,15,17,19]t_order_2: [2,4,6,8,10,12,14,16,18,20]1.查询目标分页查询第二页,每页5条,所以我们想得到的数据是[6,7,......
  • redis和memcached的区别详解
    redis和memcached的区别详解Redis和Memcache都是基于内存的数据存储系统。Memcached是高性能分布式内存缓存服务;Redis是一个开源的key-value存储系统。与Memcached类似......
  • 02-2-业务幂等性技术架构体系(1) zookeeper和redis实现幂等性
                                                         ......
  • php危险函数
    php危险函数可以执行linux系统命令,如果没有禁用相关函数,也没有对函数使用的参数进行严格有效的过滤,可能产生命令执行漏洞。1.eval()函数eval()函数把字符串按照PHP代......
  • ElasticSearch中查询(排序、高亮、分页、Filter过滤、_source筛选)
    排序(sort)sort可以让我们按照不同的字段进行排序,并且通过order指定排序的方式asc升序desc倒序GETmy_index/_search{"query":{"match":{"title":......