key redis 遍历_快乐运维Redis大数据量查询与清理
一、 keys命令(生產環境禁止使用)
簡單粗暴,由于Redis單線程這一特性,keys命令是以阻塞的方式執行的,keys是以遍歷的方式實現的復雜度是 O(n),Redis庫中的key越多,查找實現代價越大,產生的阻塞時間越長。
keys * 、keys codehole* 分別是查詢全部的key以及查詢前綴為codehole的key。特點太暴力,性能不好,搜索的是整個redis;
缺點:
1、沒有 offset、limit 參數,一次性吐出所有滿足條件的 key,萬一實例中有幾百 w 個 key 滿足條件,當你看到滿屏的字符串刷的沒有盡頭時,你就知道難受了。
2、keys 算法是遍歷算法,復雜度是 O(n),如果實例中有千萬級以上的 key,這個指令就會導致 Redis 服務卡頓,所有讀寫 Redis 的其它的指令都會被延后甚至會超時報錯,因為 Redis 是單線程程序,順序執行所有指令,其它指令必須等到當前的 keys 指令執行完了才可以繼續。
redis的keys命令,通常在用來刪除相關的key時使用,但這個命令有一個弊端,在redis擁有數百萬及以上的keys的時候,會執行的比較慢,更為致命的是,這個命令會阻塞redis多路復用的io主線程,如果這個線程阻塞,在此執行之間其他的發送向redis服務端的命令,都會阻塞,從而引發一系列級聯反應,導致瞬間響應卡頓,從而引發超時等問題,所以應該在生產環境禁止用使用keys和類似的命令smembers,這種時間復雜度為O(N),且會阻塞主線程的命令,是非常危險的。
所以我們通常在生產環境數據量較大的時候,會選擇將keys命令做重命名,禁止誤操作。
rename-command KEYS ? ? ""
官方解釋:https://redis.io/commands/KEYS
二、 scan命令(生產環境推薦使用)
以非阻塞的方式實現key值的查找,絕大多數情況下是可以替代keys命令的,可選性更強
scan命令的特點:
1、復雜度雖然也是 O(n),但是它是通過游標分步進行的,不會阻塞線程;
2、提供 limit 參數,可以控制每次返回結果的最大條數,limit 只是一個 hint,返回的結果可多可少;
3、同 keys 一樣,它也提供模式匹配功能;
4、服務器不需要為游標保存狀態,游標的唯一狀態就是 scan 返回給客戶端的游標整數;
5、返回的結果可能會有重復,需要客戶端去重復,這點非常重要;
正常情況下,使用scan沒問題,如果正在rehash,則會造成重讀
比如現在有四個桶,讀了0,1,發生rehash時, 0會到4上,1是到5,造成重讀,
redis使用高位遞增遍歷,如下, 當02,遍歷完以后0426肯定是遍歷完的
但縮容有可能發成key重復。
6、遍歷的過程中如果有數據修改,改動后的數據能不能遍歷到是不確定的;
7、單次返回的結果是空的并不意味著遍歷結束,而要看返回的游標值是否為零
? ? ? ? ?Examples:
? ? ? ? ? redis-cli -p 6379 -a password?--scan --pattern "name*"
三、DEL命令(生產環境禁止使用)
DEL?key [key ...]
刪除指定的一批keys,如果刪除中的某些key不存在,則直接忽略。
返回值
integer-reply:被刪除的keys的數量
? ? ? ? ?Examples
DEL始終在阻止模式下釋放值部分.但是,如果該值太大,例如對于大型LIST或HASH的分配太多,它會長時間阻止Redis.
四、unlink 命令(生產環境推薦使用)
unlink?key [key ...]
該命令和DEL十分相似:刪除指定的key(s),若key不存在則該key被跳過。但是,相比DEL會產生阻塞,該命令會在另一個線程中回收內存,因此它是非阻塞的。這也是該命令名字的由來:僅將keys從keyspace元數據中刪除,真正的刪除會在后續異步操作。
返回值
integer-reply:unlink的keys的數量.
? ? ? ? Examples
復合查詢刪除使用樣例:
模糊匹配要查詢的KEY:
redis-cli -p 6379?-a password --scan --pattern "name*"
將剛剛模糊匹配的KEY異步刪除:
redis-cli -p?6379?-a?password?--scan --pattern "name*"|xargs -L 2000 redis-cli -p 6379 -a password unlink
總結
以上是生活随笔為你收集整理的key redis 遍历_快乐运维Redis大数据量查询与清理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在家里自己制作烤鹌鹑?
- 下一篇: 2021款沃尔沃xc60测评来了,外观和