redis keys和scan命令

redis keys和scan命令

redis的keys命令

1.自1.0.0起可用。
时间复杂度: O(N),其中N为数据库中密钥的数目,假设数据库中的密钥名称和给定模式的长度有限。
返回所有匹配的键pattern。

尽管此操作的时间复杂度为O(N),但恒定时间却很短。例如,运行在入门级笔记本电脑上的Redis可以在40毫秒内扫描一百万个密钥数据库。

警告:将KEYS视为命令,仅应在生产环境中格外小心使用。在大型数据库上执行时,可能会破坏性能。此命令用于调试和特殊操作,例如更改键空间布局。不要在常规应用程序代码中使用KEYS。如果您正在寻找一种在键空间的子集中查找键的方法,请考虑使用SCAN或sets。

支持的全局样式:

h?llo matches hello, hallo and hxllo
h*llo matches hllo and heeeello
h[ae]llo matches hello and hallo, but not hillo
h[^e]llo matches hallo, hbllo, ... but not hello
h[a-b]llo matches hallo and hbllo
示列:
redis> MSET firstname Jack lastname Stuntman age 35
"OK"
redis> KEYS *name*
1) "lastname"
2) "firstname"
redis> KEYS a??
1) "age"
redis> KEYS *
1) "lastname"
2) "firstname"
3) "age"
redis> 

返回值
数组回复:匹配的键列表pattern。

例子
redis> MSET名姓杰克姓特技演员年龄35岁
“好”
redis> KEYS 名称
1)“姓氏”
2)“名字”
redis> KEYS一个?
1)“年龄”
redis> 按键*
1)“姓氏”
2)“名字”
3)“年龄”
Redis>

redis的scan命令

从2.8.0开始可用。

时间复杂度:每次通话O(1)。O(N)表示完整的迭代,包括足够的命令调用,以使光标返回到0。N是集合内元素的数量。
使用SCAN命令和与之密切相关的命令SSCAN,HSCAN和ZSCAN以便逐步迭代元素集合。
SCAN迭代当前选择的Redis数据库中的密钥集。
SSCAN迭代Sets类型的元素。
HSCAN迭代Hash类型的字段及其关联的值。
ZSCAN迭代Sorted Set类型的元素及其关联的分数。
由于这些命令允许增量迭代,每个调用仅返回少量元素,因此可以在生产中使用它们,而不会受到诸如KEYS或SMEMBERS之类的命令的不利影响,这些命令在被调用时可能会长时间(甚至几秒钟)阻塞服务器键或元素的大集合。

但是,虽然像SMEMBERS这样的阻塞命令能够在给定的时间内提供Set中所有元素,但是SCAN系列命令仅对返回的元素提供有限保证,因为我们递增迭代的集合可以在迭代过程中更改。

请注意,SCAN,SSCAN,HSCAN和ZSCAN的工作方式都非常相似,因此本文档涵盖了所有四个命令。但是,明显的区别是,对于SSCAN,HSCAN和ZSCAN,第一个参数是保存Set,Hash或Sorted Set值的键的名称。该SCAN命令不需要任何按键名称参数,因为它遍历当前数据库的密钥,所以迭代对象是数据库本身。

扫描基本用法
SCAN是基于游标的迭代器。这意味着在每次调用该命令时,服务器都会返回一个更新的游标,用户需要将该游标用作下一个调用中的游标参数。

游标设置为0时,迭代将开始,服务器返回的游标为0时,迭代将终止。以下是SCAN迭代的示例:

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的缺点:
在进行增量式的迭代的时候会出现,在增量式迭代的过程中出现key的改变或者key的增加就会出现key值缺少的情况。(?)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值