美文网首页
SCAN迭代器

SCAN迭代器

作者: 闲云野鹤_23dd | 来源:发表于2020-12-19 15:30 被阅读0次

    语法

    SCAN cursor [MATCH pattern] [COUNT count]

    通过类似 分页查询的方式 分批展示 数据库中的key

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

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

    以下是一个 SCAN 命令的迭代过程示例:


    image.png

    可以看到每次执行 会给一个新的游标数字,还有10个key,直到第三次 返回的游标为 0,表示已经迭代完成

    MATCH 子句

    和 KEYS 命令一样, 增量式迭代命令也可以通过提供一个正则表达式的参数, 让命令只返回和给定模式相匹配的元素, 这一点可以通过在执行增量式迭代命令时, 通过给定 MATCH 参数来实现。

    • *代表任意字符,0到多个

    • ?代表一个任意字符

    COUNT 子句

    虽然增量式迭代命令不保证每次迭代所返回的元素数量, 但我们可以使用 COUNT 选项, 对命令的行为进行一定程度上的调整。

    基本上, COUNT 选项的作用就是让用户告知迭代命令, 在每次迭代中应该从<mark style="margin: 0px; border: 0px; padding: 0px; max-width: 100%; box-sizing: border-box;">数据集里返回多少元素</mark>。

    虽然 COUNT 选项只是对增量式迭代命令的一种提示(hint), 但是在大多数情况下, 这种提示都是有效的。

    • COUNT 参数的默认值为 10 。

    • 在迭代一个足够大的、由哈希表实现的数据库、集合键、哈希键或者有序集合键时, 如果用户没有使用 MATCH 选项, 那么命令返回的元素数量通常和 COUNT 选项指定的一样, 或者比 COUNT 选项指定的数量稍多一些。

    • 在迭代一个编码为整数集合(intset,一个只由整数值构成的小集合)、 或者编码为压缩列表(ziplist,由不同值构成的一个小哈希或者一个小有序集合)时, 增量式迭代命令通常会无视 COUNT 选项指定的值, 在第一次迭代就将数据集包含的所有元素都返回给用户。

    例子

    127.0.0.1:6379[11]› SCAN 0 MATCH z* ## 遍历z开头的key

    1. "17"
      1. "zx2"
      2. "zset2"
      3. "zmin"
      4. "z2"
      5. "zx4"
        127.0.0.1:6379[11]› SCAN 0 MATCH z* COUNT 5 ## 遍历z开头的key,每次 读取5个元素
    2. "20"
      1. "zx2"
      2. "zset2"
        127.0.0.1:6379[11]› SCAN 0 MATCH z* COUNT 20 ## 遍历z开头的key,每次 读取20个元素
    3. "3"
      1. "zx2"
      2. "zset2"
      3. "zmin"
      4. "z2"
      5. "zx4"
      6. "zz1"
      7. "zmax"
      8. "zx1"
      9. "z1"
    4. "zseta"
    5. "zset1"
      127.0.0.1:6379[11]

    使用 ZCAN 优缺点:
    优点: 每次读取的数量可以控制,所以速度较快,不会造成阻塞
    缺点:
    同一个元素可能会被返回多次。
    如果一个元素是在迭代过程中被添加到数据集的, 又或者是在迭代过程中从数据集中被删除的, 那么这个元素可能会被返回, 也可能不会.

    相关文章

      网友评论

          本文标题:SCAN迭代器

          本文链接:https://www.haomeiwen.com/subject/tjcfwktx.html