首页 > 数据库 >Redis分页

Redis分页

时间:2022-11-25 12:06:36浏览次数:50  
标签:hash 分页 Redis redis db prefix 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 <[email protected]>
* @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','root1','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,data,page
From: https://blog.51cto.com/u_13940603/5886195

相关文章

  • PHP+Redis实现分页
    废话少说,上代码吧<?phpclassRedisPage{protected$_redis;protected$_redis_ip;protected$_redis_port;protected$_redis_db;protected$_has......
  • Redis 锁的使用
    <?php/***RedisdistributedlocksinPHP*@authorassasin<>*/classRedisLock{private$retryDelay;private$retryCount;private$clockDriftFactor......
  • docker-compose之redis cluster模式
    一、docker容器化的rediscluster最难搞的就是网络问题,这边记录一下集群搭建过程。二、dockerfileFROMredis:5.0.14MAINTAINERxbdRUNln-sf/usr/share/zo......
  • 分页查询 —— 二次查询法
    数据准备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实现幂等性
                                                         ......
  • ElasticSearch中查询(排序、高亮、分页、Filter过滤、_source筛选)
    排序(sort)sort可以让我们按照不同的字段进行排序,并且通过order指定排序的方式asc升序desc倒序GETmy_index/_search{"query":{"match":{"title":......
  • webflux reactive-feign 分页的实现
    生产者respositorypackagecom.fengyun.medical.productservice.repositories;importcom.fengyun.medical.domain.Handbook;importorg.springframework.data.do......
  • 广告业务存储神器:华为云GaussDB(for Redis)
    摘要:高性能、大容量、低成本、强稳定性,广告业务需要的Ta都有​一、从需求场景说起,什么是RTA广告业务?​在互联网时代,媒体平台逐渐成为广告业务的主体,而作为广告主的企业往往......
  • centos7简单登录redis
    登录数据库:redis_cli-h[host]-p[port]输入用户名、密码登录auth[username]password选择数据库selectindex12.1对key操作的命令keys*:查询所有的ke......