zoukankan      html  css  js  c++  java
  • redis scan命令使用

     
    以前的项目中有用到redis的keys命令来获取某些key,直到看了这篇文章 https://mp.weixin.qq.com/s/SGOyGGfA6GOzxwD5S91hLw安全起见,这次打算优化一下。官网建议使用scan命令来代替。于是就用了……
    官网的scan命令介绍 http://doc.redisfans.com/key/scan.html
    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,就有结果了
  • 相关阅读:
    天梯赛 社交集群(并查集)
    蓝桥杯 正则问题(dfs)
    天梯赛L3-001. 凑零钱(01背包记录物品)
    天梯赛/PAT 二叉树总结
    GPLT天梯赛 L2-022. 重排链表
    蓝桥杯 2的次幂表示(递归)
    排列与组合的一些定理
    卡特兰数
    洛谷P1349 广义斐波那契数列(矩阵快速幂)
    Manacher's Algorithm 马拉车算法(最长回文串)
  • 原文地址:https://www.cnblogs.com/jint-php7/p/11904160.html
Copyright © 2011-2022 走看看