新聞中心
這篇文章主要為大家展示了“redis如何使用scan指令代替keys指令”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“redis如何使用scan指令代替keys指令”這篇文章吧。
SCAN cursor [MATCH pattern] [COUNT count]
SCAN 命令及其相關(guān)的 SSCAN 命令、 HSCAN 命令和 ZSCAN 命令都用于增量地迭代(incrementally iterate)一集元素(a collection of elements):
SCAN 命令用于迭代當(dāng)前數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)鍵。
SSCAN 命令用于迭代集合鍵中的元素。
HSCAN 命令用于迭代哈希鍵中的鍵值對(duì)。
ZSCAN 命令用于迭代有序集合中的元素(包括元素成員和元素分值)。
以上列出的四個(gè)命令都支持增量式迭代, 它們每次執(zhí)行都只會(huì)返回少量元素, 所以這些命令可以用于生產(chǎn)環(huán)境, 而不會(huì)出現(xiàn)像 KEYS命令、 SMEMBERS 命令帶來的問題 —— 當(dāng) KEYS 命令被用于處理一個(gè)大的數(shù)據(jù)庫(kù)時(shí), 又或者 SMEMBERS 命令被用于處理一個(gè)大的集合鍵時(shí), 它們可能會(huì)阻塞服務(wù)器達(dá)數(shù)秒之久。
不過, 增量式迭代命令也不是沒有缺點(diǎn)的: 舉個(gè)例子, 使用 SMEMBERS 命令可以返回集合鍵當(dāng)前包含的所有元素, 但是對(duì)于 SCAN 這類增量式迭代命令來說, 因?yàn)樵趯?duì)鍵進(jìn)行增量式迭代的過程中, 鍵可能會(huì)被修改, 所以增量式迭代命令只能對(duì)被返回的元素提供有限的保證 (offer limited guarantees about the returned elements)。
因?yàn)?SCAN 、 SSCAN 、 HSCAN 和 ZSCAN 四個(gè)命令的工作方式都非常相似, 所以這個(gè)文檔會(huì)一并介紹這四個(gè)命令, 但是要記住:
SSCAN 命令、 HSCAN 命令和 ZSCAN 命令的第一個(gè)參數(shù)總是一個(gè)數(shù)據(jù)庫(kù)鍵。
而 SCAN 命令則不需要在第一個(gè)參數(shù)提供任何數(shù)據(jù)庫(kù)鍵 —— 因?yàn)樗氖钱?dāng)前數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)庫(kù)鍵。
scan 0 默認(rèn)返回10條數(shù)據(jù)。
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 參數(shù)指定返回?cái)?shù)據(jù)量:
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 參數(shù)來匹配模式:
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不會(huì)阻塞服務(wù)器,現(xiàn)網(wǎng)環(huán)境也可以用,真方便。
以上是“redis如何使用scan指令代替keys指令”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)站名稱:redis如何使用scan指令代替keys指令-創(chuàng)新互聯(lián)
文章分享:http://fisionsoft.com.cn/article/pjieh.html