[转帖]Redis SCAN命令详解

redis,scan,命令,详解 · 浏览次数 : 0

小编点评

## Redis SCAN命令详解 **介绍:** * SCAN命令是一个基于游标的迭代器,每次被调用之后,都会向用户返回一个新的游标,用户在下次迭代时需要使用这个新游标作为SCAN命令的游标参数,以此来延续之前的迭代过程。 * SCAN返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。 * 如果新游标返回 0 表示迭代已结束。 **相关命令:** * SSCAN 命令用于迭代集合键中的元素。 * HSCAN 命令用于迭代哈希键中的键值对。 * ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。 **获取指定前缀的key需求描述:** * 可以使用redis自带的scan命令可以解决这个问题,该命令可以快速获取以xxx开头的key。 **其他相关命令说明:** * SCAN命令可以使用MATCH选项和COUNT选项进行定制性控制,例如可以根据需要指定每次迭代返回的元素数量等。 * SCAN命令仅在整个数据库 SCAN 上可用,而不是 HSCAN 或 ZSCAN 等。 **总结:** * SCAN命令是一个基于游标的迭代器,可以方便地遍历数据库中的键值对,并按需要进行定制化的控制。

正文

https://www.jb51.net/article/257083.htm

处理一下..

 

 
SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程,这篇文章给大家介绍了Redis SCAN命令的相关知识,感兴趣的朋友一起看看吧
 

Redis Scan 命令用于迭代数据库中的数据库键。

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

SCAN 返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。如果新游标返回 0 表示迭代已结束。

相关命令:

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

1. 获取指定前缀的key

需求描述:

Redis中有大量以xxx开头的key,在不使用keys命令的情况下,如何快速获取这些前缀的key

解决方案:

redis自带的scan命令可以解决这个问题

2. SCAN命令

SCAN是一个基于游标的迭代器。这意味着在每次调用该命令时,服务器都会返回一个更新后的游标,用户需要在下一次调用中使用它作为游标参数。当游标设置为0时开始迭代,当服务器返回的游标为0时终止迭代。从游标值为0开始迭代,并调用SCAN直到返回的游标再次为0,这称为完整迭代。

时间复杂度:每次调用 O(1)。O(N) 用于完整的迭代,包括足够的命令调用以使光标返回 0。N 是集合内的元素数。

和scan命令相关的还有另外3个命令,分别是:

  • SCAN 迭代当前选定的Redis数据库中的一组键
  • SSCAN 迭代 Sets 类型的元素
  • HSCAN 迭代 Hash 类型的字段及其相关值

ZSCAN 迭代 Sorted Set 类型的元素及其相关分数

语法:

1
SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

选项:

MATCH选项
和KEYS命令类似,后面可以跟一个通配符

COUNT选项
SCAN不能保证每次迭代返回的元素数量,但可以使用COUNT选项根据经验调整SCAN的行为。基本上,使用COUNT,用户指定了每次调用时从集合中检索元素所需完成的工作量。这只是实现的一个提示,但是一般来说,但是在大多数情况下,这种提示都是有效的(在数据量少的情况下,COUNT值与返回的结果数量不相等)。

TYPE选项
可以使用 TYPE 选项要求 SCAN 仅返回与给定类型匹配的对象。 TYPE 选项仅在整个数据库 SCAN 上可用,而不是 HSCAN 或 ZSCAN 等。

到此这篇关于Redis SCAN命令的文章就介绍到这了,更多相关Redis SCAN命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

与[转帖]Redis SCAN命令详解相似的内容:

[转帖]Redis SCAN命令详解

https://www.jb51.net/article/257083.htm 处理一下.. SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程,这篇文章给大家介绍了Red

[转帖]redis中keys与scan命令的区别有哪些

https://www.yisu.com/zixun/445908.html 这篇文章将为大家详细讲解有关redis中keys与scan命令的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 redis keys和scan的区别 redis的keys命令,

[转帖]Redis Scan 原理解析与踩坑

https://www.lixueduan.com/posts/redis/redis-scan/ 主要分析了 Redis Scan 命令基本使用和具体实现,包括 Count 参数与 Scan 总耗时的关系,以及核心的逆二进制迭代算法分析。 1. 概述 由于 Redis 是单线程在处理用户的命令,而

[转帖]深入理解Redis的scan命令

熟悉Redis的人都知道,它是单线程的。因此在使用一些时间复杂度为O(N)的命令时要非常谨慎。可能一不小心就会阻塞进程,导致Redis出现卡顿。 有时,我们需要针对符合条件的一部分命令进行操作,比如删除以test_开头的key。那么怎么获取到这些key呢?在Redis2.8版本之前,我们可以使用ke

[转帖]Redis中遍历大数据量的key:keys与scan命令

https://www.cnblogs.com/-wenli/p/13045432.html keys命令 keys * 、keys id:* 分别是查询全部的key以及查询前缀为id:的key。 缺点: 1、没有 offset、limit 参数,一次返回所有满足条件的 key。 2.keys算法是

[转帖]Redis Scan 原理解析与踩坑

https://www.cnblogs.com/jelly12345/p/16424080.html 1. 概述由于 Redis 是单线程在处理用户的命令,而 Keys 命令会一次性遍历所有 Key,于是在 命令执行过程中,无法执行其他命令。这就导致如果 Redis 中的 key 比较多,那么 Ke

[转帖]一次 Scan 竟耗时上百秒?Redis Scan 原理解析与踩坑

来自:指月 https://www.lixueduan.com原文:https://www.lixueduan.com/post/redis/redis-scan/主要分析了 Redis Scan 命令基本使用和具体实现,包括Count 参数与 Scan 总耗时的关系,以及核心的逆二进制迭代算法分析

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww

[转帖]Redis 7.0 三节点哨兵(Sentinel)高可用 环境搭建手册

2022-06-17 16:253480原创Redis 本文链接:https://www.cndba.cn/dave/article/108088 1 哨兵高可用架构说明 Redis 最早的高可用方案是主从复制,但这种方案存在一个问题,就是当主库宕机后,从库不会自动切成主库,需要人工干预。 所有在主

[转帖]Redis 备份与恢复(RDB/AOF) 说明

2022-06-16 20:364580原创Redis 本文链接:https://www.cndba.cn/dave/article/108068 1 RDB 方式 1.1 RDB 备份恢复说明 Redis 的备份恢复有两种方法:RDB和AOF。 其中RDB 文件是一个经过压缩的二进制文件,有两个R