简单使用Redis集合实现分页,排名
什么是Redis?
Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。
代码
public function test(){
$this->redis->select(2);
//有序集合 查询所有成绩分数
$data= $this->redis->zRevRange('Exam',0,-1,true);
//查询当前页
$page= request()->get('page');
//查询排名
$name= request()->get('name');
//设置加减分
$kemu=request()->get('kemu');
$sou=request()->get('sou');
################# Redis有序集合分页###################
$nextpage="";
$nevpage="";
//获取所有科目数量
$count=$this->redis->zCard("Exam");
//当前页
!empty($page)?$thispage=$page:$thispage=1;
//每页显示的条数
$limit=2;
//总页数
$allpage=ceil($count/$limit);
//偏移量
$arr=($thispage-1)*$limit;
//分页展示
$data=$this->redis->zRevRange('Exam',$arr,$limit*$thispage,true);
//下一页
if ($thispage<$allpage)$nextpage=++$thispage;
//上一页
if ($thispage>$allpage)$nevpage=--$thispage;
################# 查询数据排名信息 ######################
//获取成绩排名
if (!empty($name))$mc=$this->redis->zRevRank('Exam',$name);
if (!empty($name))return json_encode(['soft'=>$mc,'message'=>'查询数据排名']);
################## 返回修改后的排名 #####################
//加减分 提高/降低排名
if (!empty($kemu)&&!empty($sou))$this->redis->zIncrBy('Exam',$sou,$kemu);
if (!empty($kemu)&&!empty($sou))return json_encode(['soft'=>$this->redis->zRevRank('Exam',$kemu)+1,'message'=>'修改成功!现在的名次']);
################# 返回页数 和数据信息 ########################
return json_encode([
'data'=>$data,
'all_count'=>$allpage, //总页
'nextpage'=>$nextpage, //下一页
'nvpage'=>$nevpage //上一页
]);
}