Redis 渐进式遍历 -- scan

news/2024/10/22 18:47:08/

前言

       keys 可以一次性把 Redis 中的所有 key 都获取到,但这个操作比较危险,一次性获取所有的key 很容易会导致 Redis 阻塞。

        而通过渐进式遍历(不是一个命令就将所有的 key 值拿到,而是每执行一次命令只获取其中的一小部分,这样就能保证当前的操作不会太卡,而想获得所有的 key 值就要重复执行多次命令)就能做到在获取到所有 key 的同时也不会阻塞 Redis 服务器,

SCAN

以渐进式的⽅式进⾏键的遍历

语法

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

时间复杂度:O(1)

返回值:下⼀次 scan 的游标(cursor)以及本次得到的键。

        游标和下标是完全不一样的,Redis 可以通过游标找到下次遍历对应的位置,但游标的含义只有 Redis 知道,程序员/客户端是不知道的

注意:⾸次 scan 从 0 开始,当 scan 返回的下次位置为 0 时,遍历结束

MATCH pattern 选项表示进行字符串匹配,与 keys 作用相同

COUNT count 选项限制要获取多少个 key

        注意此处的 count 和 MySQL 的 limit 不一样,limit 是精确的获取一个区间内的数据,而此处的 count 仅仅是对 Redis 的一个建议,实际返回的个数和指定的 count 可能不一致,但区别不会很大

TYPE type 选项限制键值对 value 的类型(但Redis 版本较低可能没有该选项)

注意:

       渐进性遍历 scan 虽然解决了阻塞的问题,但如果在遍历期间键有所变化(增加、修改、删 除),可能导致遍历时键的重复遍历或者遗漏,这点务必在实际开发中考虑(实际上在很多地方都很忌惮一边遍历,一边修改,比如 Java,c++ 等)

        除了 scan 以外,Redis ⾯向哈希类型、集合类型、有序集合类型分别提供了 hscan、sscan、zscan 命 令,它们的⽤法和 scan 基本类似,感兴趣的读者可以⾃⾏做扩展学习。


http://www.ppmy.cn/news/1455030.html

相关文章

有什么好用的思维导图软件?6个软件教你快速进行思维导图的制作

有什么好用的思维导图软件?6个软件教你快速进行思维导图的制作 以下是六款常用且功能强大的思维导图软件,它们可以帮助您快速制作思维导图: 迅捷画图: 迅捷画图是一款在线思维导图工具,具有直观易用的界面和丰富的功能。用户可…

okcc最新版本会被盗打吗?

OKCC是一款智能外呼系统,它提供了多种安全措施来防止系统被盗打。以下是一些关键的安全配置和管理措施: 立即挂失SIM卡:一旦发现OKCC系统被盗打,应立即联系运营商进行SIM卡的挂失,以阻止盗打者继续使用您的号码进行通信…

肆拾玖坊商业模式分析,新品牌如何采用合伙人模式起盘

坐标:厦门,我是易创客运营肖琳 深耕社交新零售行业10年,主要提供新零售系统工具及顶层商业模式设计、全案策划运营陪跑等。 比茅台盈利模式还牛逼的肆拾玖坊,所有男人都逃不出它的圈套!只靠49个男人,用一套…

01.本地工作目录、暂存区、本地仓库三者的工作关系

1.持续集成 1.持续集成CI 让产品可以快速迭代,同时还能保持高质量。 简化工作 2.持续交付 交付 3.持续部署 部署 4.持续集成实现的思路 gitjenkins 5.版本控制系统 1.版本控制系统概述2.Git基本概述3.Git基本命令 2.本地工作目录、暂存区、本地仓库三者的工作关系…

(014) java.math.BigInteger cannot be cast to java.lang.Long

文章目录 问题原因 问题 mysql 和 Java 在进行数据类型的映射时,报错: 原因 部分 jdk8 和高版本的 jdk 对 mysql 的 BigInteger 类型转换为 Java的 Long 类型认为是错误的类型转换。 1.解决方法一:更换兼容的 jdk8版本。 2.解决方法二&am…

《四月女友》曝“逆光微笑”版海报 佐藤健长泽雅美重拾爱情初心

改编自川村元气同名小说,山田智和导演,佐藤健、长泽雅美、森七菜主演的电影《四月女友》将于5月18日全国上映,今日片方发布“逆光微笑”版海报。海报中,佐藤健、长泽雅美、森七菜逆光而立,或微笑或凝眸,在暖…

STM32 CAN开发步骤

STM32 CAN开发通常涉及以下步骤: 1. 配置CAN外设:根据具体的STM32系列和型号,选择并配置CAN外设。可以使用STM32CubeMX软件进行可视化配置,或者直接编写寄存器级的配置代码。 2. 初始化CAN外设:使用HAL库或者寄存器级…

video标签,如何隐藏右下角三个点包含的功能?

// nodownload: 不要下载 // nofullscreen: 不要全屏 // noremoteplayback: 不要远程回放 // disablePictureInPicture: 不要画中画 <videocontrols disablePictureInPicture"true"controlslist"nodownload nofullscreen noremoteplayback" > </v…