描述:
目前很多项目都会使用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);
效果如下