zoukankan      html  css  js  c++  java
  • redis 迭代命令SCAN、SSCAN、HSCAN、ZSCAN

    SCAN 命令用于迭代当前数据库中的数据库键。
    SSCAN 命令用于迭代集合键中的元素。
    HSCAN 命令用于迭代哈希键中的键值对。
    ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。

    SCAN、SSCAN、HSCAN、ZSCAN每次执行都只会返回少量元素,所以这些命令可以用于生产环境,而不会出现像KEYS、SMEMBERS命令带来的问题,当KEYS命令被用于处理一个大的数据库时,又或者SMEMBERS命令被用于处理一个大的集合键时,它们可能会阻塞服务器达数秒之久。


    SCAN cursor [MATCH pattern] [COUNT count]
    SSCAN、HSCAN、ZSCAN的第一个参数总是一个数据库键;而SCAN命令则不需要在第一个参数提供任何数据库键,因为它迭代的是当前数据库中的所有数据库键。
    可以通过增量式迭代命令提供的 COUNT 选项来指定每次迭代返回元素的最大值;COUNT参数的默认值为10。

    scan 0

    sadd myset 1 2 3 foo foobar feelsgood
    sscan myset 0 match f*


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

    当SCAN命令的游标参数设置为0时,服务器将开始一次新的迭代,而当服务器向用户返回值为0的游标时,表示迭代已结束。
    如果一个元素是在迭代过程中被添加到数据集的,又或者是在迭代过程中从数据集中被删除的,那么这个元素可能会被返回,也可能不会。

    在同一时间,可以有任意多个客户端对同一数据集进行迭代,客户端每次执行迭代都需要传入一个游标,并在迭代执行之后获得一个新的游标,而这个游标就包含了迭代的所有状态,因此,服务器无须为迭代记录任何状态。
    因为迭代的所有状态都保存在游标里面,而服务器无须为迭代保存任何状态,所以客户端可以在中途停止一个迭代,而无须对服务器进行任何通知。即使有任意数量的迭代在中途停止,也不会产生任何问题。

  • 相关阅读:
    这些年,产品经理们折腾过的原型工具
    这些年,产品经理们折腾过的原型工具
    这些年,产品经理们折腾过的原型工具
    区块链与微服务天生是一对
    区块链与微服务天生是一对
    区块链与微服务天生是一对
    区块链与微服务天生是一对
    OpenCV和Matlab
    OpenCV和Matlab
    现在最暴利的行业是什么?
  • 原文地址:https://www.cnblogs.com/Mike_Chang/p/9499625.html
Copyright © 2011-2022 走看看