`
m635674608
  • 浏览: 5031332 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Redis Scan命令

 
阅读更多

Redis Scan命令

SCAN cursor [MATCH pattern] [COUNT count]

SCAN 命令及其相关的 SSCAN 命令、 HSCAN 命令和 ZSCAN 命令都用于增量地迭代(incrementally iterate)一集元素(a collection of elements):

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

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

不过, 增量式迭代命令也不是没有缺点的: 举个例子, 使用 SMEMBERS 命令可以返回集合键当前包含的所有元素, 但是对于 SCAN这类增量式迭代命令来说, 因为在对键进行增量式迭代的过程中, 键可能会被修改, 所以增量式迭代命令只能对被返回的元素提供有限的保证 (offer limited guarantees about the returned elements)。

因为 SCAN 、 SSCAN 、 HSCAN 和 ZSCAN 四个命令的工作方式都非常相似, 所以这个文档会一并介绍这四个命令, 但是要记住:

  • SSCAN 命令、 HSCAN 命令和 ZSCAN 命令的第一个参数总是一个数据库键。
  • 而 SCAN 命令则不需要在第一个参数提供任何数据库键 —— 因为它迭代的是当前数据库中的所有数据库键。

SCAN命令的基本用法】  

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

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

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

SCAN的命令保证

  SCAN 命令, 以及其他增量式迭代命令, 在进行完整遍历的情况下可以为用户带来以下保证: 从完整遍历开始直到完整遍历结束期间, 一直存在于数据集内的所有元素都会被完整遍历返回; 这意味着, 如果有一个元素, 它从遍历开始直到遍历结束期间都存在于被遍历的数据集当中, 那么 SCAN 命令总会在某次迭代中将这个元素返回给用户。

然而因为增量式命令仅仅使用游标来记录迭代状态, 所以这些命令带有以下缺点:

  • 同一个元素可能会被返回多次。 处理重复元素的工作交由应用程序负责, 比如说, 可以考虑将迭代返回的元素仅仅用于可以安全地重复执行多次的操作上。
  • 如果一个元素是在迭代过程中被添加到数据集的, 又或者是在迭代过程中从数据集中被删除的, 那么这个元素可能会被返回, 也可能不会, 这是未定义的(undefined)。

SCAN 命令每次执行返回的元素数量

  增量式迭代命令并不保证每次执行都返回某个给定数量的元素。

  增量式命令甚至可能会返回零个元素, 但只要命令返回的游标不是 0 , 应用程序就不应该将迭代视作结束。

  用户可以通过增量式迭代命令提供的 COUNT 选项来指定每次迭代返回元素的最大值。

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

基本上, COUNT 选项的作用就是让用户告知迭代命令, 在每次迭代中应该从数据集里返回多少元素。

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

MATCH选项

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

  以下是一个使用 MATCH 选项进行迭代的示例:

  

参考:http://redisdoc.com/key/scan.html

 

 

http://www.cnblogs.com/tekkaman/p/4887293.html

分享到:
评论

相关推荐

    Redis Scan命令的基本使用方法

    Redis 的 SCAN 命令是一组用于增量迭代数据集元素的命令,包括 SCAN、SSCAN、HSCAN 和 ZSCAN,它们分别用于迭代数据库键、集合元素、哈希字段及值以及有序集合元素及其得分。这些命令的优势在于它们是增量式的,每次...

    详解Redis SCAN命令实现有限保证的原理

    Redis中的`SCAN`命令是一个用于迭代数据库中键的命令,提供了有限保证的遍历机制,这意味着它能够确保在完整遍历期间存在的所有元素至少被返回一次,但可能会返回多次。这是因为`SCAN`命令的设计考虑到了在遍历过程...

    Redis中scan命令的深入讲解

    Redis的`scan`命令是为了解决在大量键值对中查找特定键时避免阻塞服务器的问题,特别是在处理`keys`命令可能导致的性能问题时。`keys`命令虽然能快速找到所有匹配模式的键,但它的时间复杂度是O(N),在键库庞大的...

    redis 用scan指令 代替keys指令(详解)

    Redis中的`SCAN`命令是为了解决`KEYS`命令在大数据量下可能导致服务器阻塞的问题而设计的。`KEYS`命令一次性返回所有匹配的键,如果数据库中键的数量非常大,这将消耗大量的计算资源,从而影响Redis服务器的性能。`...

    Redis中Scan命令的基本使用教程

    二是scan命令,以非阻塞的方式实现key值的查找,绝大多数情况下是可以替代keys命令的,可选性更强 以下写入100000条key***:value***格式的测试数据(ps:用pipline的话,1w一笔,每一笔在秒级完成) # -*- coding: ...

    php redis扩展支持scan命令实现方法

    当我们谈论“php redis扩展支持scan命令实现方法”时,实际上是指如何在PHP中利用Redis的`SCAN`命令来迭代并查找键空间中的键。`SCAN`命令是Redis提供的一种非阻塞的遍历方式,相比`KEYS`命令,它不会锁定服务器,...

    Redis命令参考手册完整版

    在实际应用中,建议使用SCAN命令来代替KEYS命令,SCAN命令提供了更为高效的方式来迭代遍历key集合。 3. RANDOMKEY命令用于从当前数据库中随机返回一个key,如果数据库为空,则返回nil。RANDOMKEY命令的时间复杂度为...

    Redis命令参考手册

    对于键(Key)的操作,Redis提供了DEL、DUMP、EXISTS、EXPIRE、EXPIREAT、KEYS、MIGRATE、MOVE、OBJECT、PERSIST、PEXPIRE、PEXPIREAT、PTTL、RANDOMKEY、RENAME、RENAMENX、RESTORE、SORT、TTL、TYPE和SCAN等命令。...

    redis中scan命令的基本实现方法

    redis的键在键值对大小大于hash-max-ziplist-value且个数小于hash-max-ziplist-entries的时候,是存放在散列表数据结构中的,在运行keys命令的时候,需要遍历数据库键空间,把所有键都取出来后与keys后面的pattern...

    redis-scanstreams:Redis *SCAN 命令的流接口,用于 node_redis

    为 Redis *SCAN 命令提供流接口。 使用流版本客户端上的 SCAN、SSCAN、HSCAN 和 ZSCAN 方法。 您可以阅读有关 SCAN 的更多信息。 示例:与使用 var redis = require ( "redis" ) // replace the methods for any...

    redis基本命令.md

    ### Redis基本命令详解 #### 一、基础命令 1. **PING** - **命令格式**: `PING` - **作用**: 测试客户端与Redis服务器之间的连接是否正常。 - **示例**: 输入 `PING` 后,若接收到 `PONG` 的响应,则表明连接...

    Redis 命令参考 2019.pdf

    ### Redis 命令参考知识点详解 #### 一、引言 Redis 是一款开源的、高性能的键值存储系统,支持多种数据结构如字符串、哈希表、列表、集合及有序集合等。它广泛应用于缓存、消息队列、实时数据分析等领域。本文将...

    C#操作Redis服务器Demo

    你可以通过NuGet包管理器安装StackExchange.Redis库,命令为:`Install-Package StackExchange.Redis`。 接下来,我们需要创建连接到Redis服务器的配置。在C#代码中,这通常涉及到创建`ConnectionMultiplexer`对象...

    Redis 命令参考

    - `SCAN` 命令用于迭代当前数据库中的键。 ### 字符串(String) 字符串是最基础的键值对类型,可以包含任何数据,如图片或序列化的对象。 - `APPEND` 命令用于在字符串值的末尾追加数据。 - `BITCOUNT` 和 `BITOP`...

    REDIS命令文档网页离线版

    此外,`KEYS`和`SCAN`命令用于查找匹配模式的键,`FLUSHALL`和`FLUSHDB`则清除所有数据库或当前数据库的数据。 集群方面,Redis支持主从复制和自动故障转移,通过`SLAVEOF`命令设置节点为其他节点的副本。最新版本...

Global site tag (gtag.js) - Google Analytics