自学内容网 自学内容网

Redis - 渐进式遍历

        Redis 使⽤scan命令进⾏渐进式遍历键,进⽽解决直接使⽤keys获取键时可能出现的阻塞问 题。每次scan命令的时间复杂度是O(1),但是要完整地完成所有键的遍历,需要执⾏多次scan。整 个过程如图2-29所⽰。

图2-29scan命令渐进式遍历

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

SCAN

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

语法:

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

命令有效版本:2.8.0之后

时间复杂度:O(1)

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

⽰例:

 redis 127.0.0.1:6379> scan 0
 1) "17"
 2)  1) "key:12"
     2) "key:8"
     3) "key:4"
     4) "key:14"
     5) "key:16"
     6) "key:17"
     7) "key:15"
     8) "key:10"
     9) "key:3"
     10) "key:7"
     11) "key:1"
 redis 127.0.0.1:6379> scan 17
 1) "0"
 2) 1) "key:5"
     2) "key:18"
     3) "key:0"
     4) "key:2"
     5) "key:19"
     6) "key:13"
     7) "key:6"
     8) "key:9"
     9) "key:11"

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

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


原文地址:https://blog.csdn.net/ketil27/article/details/143593907

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!