10.Redis 渐进式遍历

Redis 渐进式遍历

渐进式遍历

keys 命令一次性的把整个redis中所有的key都获取到,keys *但这个操作比较危险,可能会一下子得到太多的key,阻塞 redis 服务器。

通过渐进式遍历,就可以做到,既可以获取到所有的 key,同时又不会卡死服务器

不是一个命令,把所有的 key 都拿到,而是每执行一次命令,只获取到其中的一部分,这样的话就能保证当前这一次操作不会太卡。若要得到所有的 key 就需要多次遍历,即多次执行渐进式遍历命令。

  • SCAN:用于遍历集合中的所有元素,可以使用游标来分批获取结果。
  • ZSCAN:用于遍历有序集合中的所有元素,可以使用游标来分批获取结果。
  • HSCAN:用于遍历哈希表中的所有字段和值,可以使用游标来分批获取结果。
  • SSCAN:用于遍历集合中的所有元素,可以使用游标来分批获取结果。

由于其他的使用方法的都是相同的,下面只讲解 scan。

scan

语法:
SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

  • cursor 不能理解成下标,不是一个 连续递增 的整数,其仅仅就是一个"字符串",一开始将 cursor 设置成 0了,意味着这次遍历是从头开始获取的,其中如下图返回值 1) 旁边的数字就是告诉你,下次继续遍历时,光标要设置的值。
  • MATCH 指的就是通配符。
  • COUNT 限制这一次遍历能够获取到多少个元素,默认是10。此处的 count 只是给 redis 服务器一个 提示/建议。 写入的 count 和 实际返回的key的个数不一定是完全相同的,但是不会差很多,且每次遍历count的数字可以随便更改,每次遍历可以不同~
  • TYPE 指定只获取到 那种 value类型的 key


取出完整数据示例:

渐进性遍历 scan 虽然解决了阻塞的问题,但如果在遍历期间键有所变化(增加、修改、删除),可能导致遍历时键的重复遍历或者遗漏,这点务必在实际开发中考虑。相当于c++中的stl 的迭代器失效问题。

相关推荐
01_ice2 分钟前
数据库基础
数据库
deepdata_cn23 分钟前
向量数据库是非结构化数据的AI检索底座
数据库·人工智能
梁辰兴24 分钟前
软件工程:数据库设计
数据库·软件工程·数据库设计·逻辑设计·概念设计·梁辰兴·物理设计
10mAh35 分钟前
【Git】误删分支、reset --hard 后提交丢了怎么办?——reflog、fsck 与安全恢复实战
数据库·git·安全·回归
J_bean36 分钟前
剖析 MySQL InnoDB 共享行锁 (S) & 排他行锁 (X)
数据库·mysql·共享行锁·s lock·排他行锁·x lock
Lumistory41 分钟前
城市景观亮化设施维护管养的核心痛点与标准化解决方案
数据库·光照贴图
倒流时光三十年1 小时前
第六阶段 57 · ES|QL 与 SQL API(用 SQL 查 ES)
数据库·sql·elasticsearch
breeze jiang2 小时前
Next.js App Router 父子组件 RSC 拆分实战:从 Redis Hash 到客户端交互的最小化边界
javascript·redis·哈希算法
努力进修2 小时前
“数据心脏” 驱动能源自主:国产数据库支撑 Cemsol 实现固井全流程数字化闭环
数据库·人工智能·能源
vHelios2 小时前
SQL不会写?不会找关联表?复杂SQL语句编写逻辑实现思路请查收✉
数据库·sql