千家信息网

Redis中用scan替换keys的方法

发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,我们都知道查找 Redis 的键时,可以使用 keys pattern,但当 key 太多时,keys 命令的效率就很低,如果在线上直接使用,甚至可能发生生产事故,这时候,我们不妨使用 scan 命令
千家信息网最后更新 2025年01月25日Redis中用scan替换keys的方法

我们都知道查找 Redis 的键时,可以使用 keys pattern,但当 key 太多时,keys 命令的效率就很低,如果在线上直接使用,甚至可能发生生产事故,这时候,我们不妨使用 scan 命令。

SCAN 命令是一个基于游标的迭代器(cursor based iterator):

SCAN 命令每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。

当 SCAN 命令的游标参数被设置为 0 时, 服务器将开始一次新的迭代, 而当服务器向用户返回值为 0 的游标时, 表示迭代已结束。

生成 key

connect('127.0.0.1', 6379, 10);$redis->select(2);$arr = [    'rwer',    '24erw',    'rterq4',    'sdgfd5',    'dgsdg',    'sfst',];for ($i=0; $i<1000; $i++) {    $redis->set(md5($i.$arr[$i%6]), md5($arr[$i%6].'sdfsd'));}echo "OK".PHP_EOL;

keys 查看个数

keys c*

Redis中使用scan替换keys

scan 遍历

connect('127.0.0.1', 6379, 10);$redis->select(2);$iterator = null;// 遍历前缀$pattern = 'c*';$count = 100;// 务必设置,如果没扫描到,继续扫描,而不是返回空,否则while直接退出,遍历就会不准确$redis->setOption(\Redis::OPT_SCAN, \Redis::SCAN_RETRY);$total = [];$i = 0;// $count可以不设置,非必需参数while($arr = $redis->scan($iterator, $pattern, $count)) {    $arrVal = $redis->mget($arr);    $ret = array_combine($arr, $arrVal);    $total = array_merge($total, $ret);    $i++;}// var_dump($total);var_dump($i);echo count($total).PHP_EOL;

Redis中使用scan替换keys

当然你也可以不使用 \Redis::OPT_SCAN, \Redis::SCAN_RETRY 这两个参数,自行循环,判断返回值是不是 false,也能遍历成功。

以上就是Redis 中如何使用 scan 替换 keys的详细内容,更多请关注其它相关文章!

命令 游标 迭代 参数 用户 服务器 服务 成功 两个 个数 事故 内容 前缀 就是 效率 文章 更多 过程 在线 循环 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 桂林理工大学网络安全 中班幼儿网络安全游戏教案 降低企业面临的网络安全风险 cpu数据库选择 山东省大数据网络安全实验室 懂点网络技术做什么兼职 软件开发时期有哪几个阶段 上海大学 数据库原理2 网络安全家长心得200字 怎么查网站服务器ip 数据库原理 公开课 韩服dnf手游服务器正在维护中 网络安全法组织生活会 湖南 dns服务器 山西超频服务器销售价格 魔兽世界经典怀旧服玩哪个服务器 绝地求生怎么进入欧洲服务器 数据库太大打开软件慢 做网络安全工作月薪大概多少 宝安区网络技术转移代理价钱 华为数据库gaussdb命令 目前比较厉害的网络技术 龙岗软件开发定制 全球恐怖主义数据库怎么查 职场干货互联网科技时代 学电信网络技术上啥学校 吉林运营网络安全工程联系人 广东肇庆dns服务器云主机 网络安全态势动态感知中标 编程 用服务器cpu
0