redis SCAN使用

SCAN命令是一个基于游标的迭代器。这意味着命令每次被调用都需要使用上一次这个调用返回的游标作为该次调用的游标参数,以此来延续之前的迭代过程

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

也就是说scan 0 是一次全新的查询,直到返回的游标值是0时,才表示整个库的查询结束。

比如:

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"

在上面这个例子中, 第一次迭代使用 0 作为游标, 表示开始一次新的迭代。
第二次迭代使用的是第一次迭代时返回的游标, 也即是命令回复第一个元素的值 —— 17 。

从上面的示例可以看到, SCAN 命令的回复是一个包含两个元素的数组, 第一个数组元素是用于进行下一次迭代的新游标, 而第二个数组元素则是一个数组, 这个数组中包含了所有被迭代的元素。
在第二次调用 SCAN 命令时, 命令返回了游标 0 , 这表示迭代已经结束, 整个数据集(collection)已经被完整遍历过了。
以 0 作为游标开始一次新的迭代, 一直调用 SCAN 命令, 直到命令返回游标 0 , 我们称这个过程为一次完整遍历(full iteration)。

所以可以通过这个方法来查询库大的整个库的key,如果库小的话直接keys *搞定

可以使用下面的脚本来得到结果

#!/bin/bash

redis-cli -h 127.0.0.1 -p 6379 scan 0 > keys.txt

a=`head -1 keys.txt`

while [ $a -ne 0 ]

do

        redis-cli -h 127.0.0.1 -p 6379 scan $a > key.txt

        redis-cli -h 127.0.0.1 -p 6379 scan $a >> keys.txt

        a=`head -1 key.txt`

        sleep 1

done

如果指定库的话改为 redis-cli -h 127.0.0.1 -p 6379 -n 1 scan 0 > keys.txt

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第八章 数据查询和选择 ||| 第十章 获取GIS数据列表和描述信息 我们将在本章中介绍以下几个案例: 游标对象(...
    muyan阅读 21,709评论 5 21
  • UILabel如果让文本自适应经常遇到,UILabel里面的显示区域固定, 但是里面的文字显示合适的字体大小的...
    喜欢就可以阅读 2,472评论 0 0
  • 保持善心,和大自然和谐共处
    金吉善子阅读 1,108评论 0 0
  • 5.想两个你自己产生"我的更好"思维的例子。描述一下那种思维,以及你最初意识到它的方式。如果可以的话,找出是什么导...
    sxrunn阅读 1,441评论 0 0
  • 在朋友安排下,今天很高兴参观广汽丰田工厂,这是我头一次参观汽车工厂,又听到专业的介绍,很开心。丰田的生产管理令人叹...
    巴拿马草帽阅读 9,243评论 0 3

友情链接更多精彩内容