日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

key redis 遍历_快乐运维Redis大数据量查询与清理

發布時間:2024/9/27 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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大数据量查询与清理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。