这里有新鲜出炉的 Redis 命令参考, 程序狗速度看过来!
Redis Key-Value 数据库
Redis 是一个开源的使用 ANSI C 语言编写, 支持网络, 可基于内存亦可持久化的日志型, Key-Value 数据库, 并提供多种语言的 API.
下面小编就为大家分享一篇 redis 用 scan 指令 代替 keys 指令详解, 具有很好的参考价值, 希望对大家有所帮助. 一起跟随小编过来看看吧
众所周知, 当 redis 中 key 数量越大, keys 命令执行越慢, 而且最重要的会阻塞服务器, 对单线程的 redis 来说, 简直是灾难, 终于找到了替代命令 scan.
SCAN cursor [MATCH pattern] [COUNT count]
SCAN 命令及其相关的 SSCAN 命令, HSCAN 命令和 ZSCAN 命令都用于增量地迭代 (incrementally iterate) 一集元素(a collection of elements):
SCAN 命令用于迭代当前数据库中的数据库键.
SSCAN 命令用于迭代集合键中的元素.
HSCAN 命令用于迭代哈希键中的键值对.
ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值).
以上列出的四个命令都支持增量式迭代, 它们每次执行都只会返回少量元素, 所以这些命令可以用于生产环境, 而不会出现像 KEYS 命令, SMEMBERS 命令带来的问题 -- 当 KEYS 命令被用于处理一个大的数据库时, 又或者 SMEMBERS 命令被用于处理一个大的集合键时, 它们可能会阻塞服务器达数秒之久.
不过, 增量式迭代命令也不是没有缺点的: 举个例子, 使用 SMEMBERS 命令可以返回集合键当前包含的所有元素, 但是对于 SCAN 这类增量式迭代命令来说, 因为在对键进行增量式迭代的过程中, 键可能会被修改, 所以增量式迭代命令只能对被返回的元素提供有限的保证 (offer limited guarantees about the returned elements).
因为 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 指令 (详解) 就是小编分享给大家的全部内容了, 希望能给大家一个参考, 也希望大家多多支持 PHPERZ.
来源: http://www.phperz.com/article/18/0201/362636.html