redis 用scan指令 代替keys指令(详解)

2019-09-03| 发布者: admin| 查看: |


scan cursor [match pattern] [count count]

scan 命令及其相关的 sscan 命令、 hscan 命令和 zscan 命令都用于增量地迭代一集元素:

scan 命令用于迭代当前数据库中的数据库键。

sscan 命令用于迭代集合键中的元素。

hscan 命令用于迭代哈希键中的键值对。

zscan 命令用于迭代有序集合中的元素。

以上列出的四个命令都支持增量式迭代, 它们每次执行都只会返回少量元素, 所以这些命令可以用于生产环境, 而不会出现像 keys命令、 smembers 命令带来的问题 —— 当 keys 命令被用于处理一个大的数据库时, 又或者 smembers 命令被用于处理一个大的集合键时, 它们可能会阻塞服务器达数秒之久。

不过, 增量式迭代命令也不是没有缺点的: 举个例子, 使用 smembers 命令可以返回集合键当前包含的所有元素, 但是对于 scan 这类增量式迭代命令来说, 因为在对键进行增量式迭代的过程中, 键可能会被修改, 所以增量式迭代命令只能对被返回的元素提供有限的保证 。

因为 scan 、 sscan 、 hscan 和 zscan 四个命令的工作方式都非常相似, 所以这个文档会一并介绍这四个命令, 但是要记住:

sscan 命令、 hscan 命令和 zscan 命令的第一个参数总是一个数据库键。

而 scan 命令则不需要在第一个参数提供任何数据库键 —— 因为它迭代的是当前数据库中的所有数据库键。

scan 0 默认返回10条数据。

127.0.0.1:6379 scan 0

1) "81920"
2)  1) "申博网址登入cmd:1000004739:4"
  2) "cmd:1000010475:2"
  3) "cmd:380071400001208:766"
  4) "cmd:1000006866:list"
  5) "cmd:380071400001208:20415"
  6) "cmd:380071400001231:21530"
  7) "cmd:380071400001208:21780"
  8) "cmd:7485630165:list"
  9) "cmd:1000001545:2"
  10) "cmd:380071400001231:4387"











可以用count 参数指定返回数据量:

127.0.0.1:6379 scan 0 count 100

1) "104448"
2)  1) "cmd:1000004739:4"
  2) "cmd:1000010475:2"
  3) "cmd:380071400001208:766"
  4) "cmd:1000006866:list"
  5) "cmd:380071400001208:20415"
  6) "cmd:380071400001231:21530"
  7) "cmd:380071400001208:21780"
  8) "cmd:7485630165:list"
  9) "cmd:1000001545:2"
  10) "cmd:380071400001231:4387"
  ......
  94) "cmd:201610200062:6"
  95) "cmd:vf3748211006:3"
  96) "cmd:1000009121:4"
  97) "cmd:380071400001231:6563"
  98) "cmd:1000010252:id"
  99) "cmd:1000005261:5"
  100) "server:45568_0"



















使用match 参数来匹配模式:

127.0.0.1:6379 scan 0 match cmd* count 100

1) "104448"
2)  1) "cmd:1000004739:4"
  2) "cmd:1000010475:2"
  3) "cmd:380071400001208:766"
  4) "cmd:1000006866:list"
  5) "cmd:380071400001208:20415"
  6) "cmd:380071400001231:21530"
  7) "cmd:380071400001208:21780"
  8) "cmd:7485630165:list"
  9) "cmd:1000001545:2"
  10) "cmd:380071400001231:4387"
  ......
  86) "cmd:201610200062:6"
  87) "cmd:vf3748211006:3"
  88) "cmd:1000009121:4"
  89) "cmd:380071400001231:6563"
  90) "cmd:1000010252:id"
  91) "cmd:1000005261:5"


















最重要的是scan不会阻塞服务器,现网环境也可以用,真方便。

以上这篇redis 用scan指令 代替keys指令就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持萬仟网。