scan命令的基本用法
cursor 用法
scan命令是一个基于游标的迭代器(cursor based iterator): scan命令每次被调用以后, 都会向用户返回一个新的游标, 用户在下次迭代时须要使用这个新游标做为 scan命令的游标参数, 以此来延续以前的迭代过程。 当 scan命令的游标参数被设置为 0 时, 服务器将开始一次新的迭代, 而当服务器向用户返回值为 0 的游标时, 表示迭代已结束。
示例
第一次迭代使用 0 做为游标, 表示开始一次新的迭代,第二次使用的是第一次迭代时返回的游标。
scan命令的回复是一个包含两个元素的数组, 第一个数组元素是用于进行下一次迭代的新游标, 而第二个数组元素则是一个数组, 这个数组中包含了全部被迭代的元素.
在第二次调用scan命令时,命令返回了游标0,表示迭代已经结束,整个数据集已经遍历完了。
以0做为游标开始一次新的迭代,一直调用scan命令,知道游标返回0,咱们称这个过程为一次完整遍历
match用法
和keys命令同样,增量式迭代命令也能够经过提供一个glob风格的模式参数,让命令只返回和给定模式相匹配的元素,这一点能够在执行增量式迭代命令时,经过给定MATCH<pattern>参数来实现
数据量比较少,因此加count限制扫描的元素,第一次没有匹配到,因此是空的list,第二次迭代就找到对应的值了
COUNT
虽然增量式迭代不保证每次迭代所返回的元素数量,但咱们可使用count选项,count选项的做用是让用户告知迭代命令,在每次迭代中应该从数据集里返回多少元素
虽然 COUNT 选项只是对增量式迭代命令的一种提示(hint), 可是在大多数状况下, 这种提示都是有效的。
-
COUNT 参数的默认值为 10 。
-
在迭代一个足够大的、由哈希表实现的数据库、集合键、哈希键或者有序集合键时, 若是用户没有使用 MATCH 选项, 那么命令返回的元素数量一般和 COUNT 选项指定的同样, 或者比 COUNT 选项指定的数量稍多一些。
-
在迭代一个编码为整数集合(intset,一个只由整数值构成的小集合)、 或者编码为压缩列表(ziplist,由不一样值构成的一个小哈希或者一个小有序集合)时, 增量式迭代命令一般会无视 COUNT 选项指定的值, 在第一次迭代就将数据集包含的全部元素都返回给用户。
用户能够在每次迭代中按本身的须要随意改变 COUNT 值, 只要记得将上次迭代返回的游标用到下次迭代里面就能够了。
根据上面的介绍和例子,用php写一段scan的用法
$redis = Cache::store('redis')->handler();
//$cursor = 0;//游标,等于0没有结果,坑
$cursor = null;
$redis->setOption(\Redis::OPT_SCAN,\Redis::SCAN_RETRY);
$arr = [];
while ($res = $redis->scan($cursor, '77dj_app:activity:4:*:135')) {
if (is_array($res)) {
$arr = array_merge($arr, $res);
}
}
var_dump($arr);exit;
可是始终返回的是空数组
看github上面的用法是cursor = null ,而后将cursor的0改成null,就有结果了