描述:

目前很多项目都会使用Nosql数据库redis来缓存数据,redis的数据结构丰富而且可以持久化,因此用的很多。其中redis的哈希分页实现,如果用redis原有的api来实现会相对麻烦一点,下面提供一种解决方案,不多说废话,直接上代码

解决方案:

<?php
$redis = new Redis();
$redis->connect('127.0.0.1');
//构造测试数据
for($i=1; $i<20; $i++) {
    $redis->hset('user:'.$i, 'name', '小明'.$i);
    $redis->hset('user:'.$i, 'age', 10+$i);
}
//键值前缀
$pre_key = "user:"; 
//页面值
$page = 2;   //起始页
$size = 2;   //每页显示数
$end   = $page * $size;
$start = ($page-1) * $size + 1;
$lua = luaStr($start, $end, $pre_key);
$s = $redis->eval($lua, array(), 0);
function luaStr($start, $end , $pre_key) {
$keys = array();
for($i=$start;$i<=$end;$i++) {
    $keys[]= "'".$pre_key.$i."'";
}
$keys = implode(',', $keys);
$lua = <<<SCRIPT
     local res={};
     local keys={ {$keys} };
     for i,v in pairs(keys)  do  res[i]=redis.call('hgetall', v) end;
     return res
SCRIPT;
   return $lua;
}
echo "<pre>";
var_dump($s);

效果如下

redis的zset分页 redis如何实现分页_解决方案