Home
Linux
Golang
MySQL
PHP
Other
Redis分页查询
创建日期:2019-11-11 10:50:21
更新日期:2023-12-01 14:30:41
栏目:
Other
浏览:1360
> 思路:采用 Redis 的有序集合,通过分数来对元素排序,我们可以将用户的 ID 等键存在该有序集合中,将用户的真实信息存在一个 Hash 中,通过分数取出对应页码的 ID,然后根据 ID 批量取出用户信息. ## 代码演示 ``` public function page(Request $request, $page) { $key = 'shuxiaoyuan'; $value = 'shuxiaoyuan:info'; // 采用Redis管道命令,批量写入99999条数据,为啥不是十万,你猜 $data = Redis::pipeline(function ($pipe) use ($key, $value) { for ($i = 1; $i < 100000; $i++) { $pipe->zadd($key, $i, 'user_' . $i); $pipe->hset($value, 'user_' . $i, str_random()); } }); // 分页显示 $pageSize = 10; $limit_s = ($page - 1) * $pageSize; $limit_e = ($limit_s + $pageSize) - 1; $range = Redis::zrevrange($key, $limit_s, $limit_e, 'withscores'); // 分数从大到小 $count = Redis::zcard($key); //总条数 $pageCount = ceil($count / $pageSize); //总页数 $keys = array_keys($range); $pageList = Redis::hmget($info, $keys); $data = array( 'data' => $pageList, //需求数据 'page' => array( 'page' => $page, //当前页数 'pageSize' => $pageSize, //每页多少条 'count' => $count, //记录总数 'pageCount' => $pageCount //总页数 ) ); dd($data); } ```
内容版权声明:本文为舒孝元原创文章,转载无需和我联系,但请注明来自
舒孝元博客:https://www.shuxiaoyuan.com/info/46
联系邮箱:sxy@shuxiaoyuan.com