redis的bigkey掃描指令碼
眾所周知,redis裡面的大key存在是非常危險的一件事情。因為最近的工作轉移到中介軟體相關的工作,因此關注了一下bigkey的掃描方法。首先介紹一下阿里雲提供的掃描指令碼:
具體可見:
我對這個指令碼進行了一個壓力測試,在redis的記憶體為15G,key的數量為2KW,ops為40K到80K之間,在這種情況下,阿里雲的指令碼完全不能跑成功(估計跑出來的時間以天為單位),主要原因是每確認一個key的情況,就需要與redis互動多次。因此,我對它的指令碼進行了改造,加入了pipeline和debug object方法,指令碼如下:
import sys import redis def find_big_key_normal(db_host, db_port, db_password, db_num): client = redis.StrictRedis(host = db_host, port = db_port, password = db_password, db = db_num) i = 0 temp = client.scan(cursor = i,count = 1000 ) j = 0 while temp[ 0 ]> 0 : i = temp[ 0 ] j = j + len (temp[ 1 ]) try : r = client.pipeline(transaction = False ) for k in temp[ 1 ]: r.debug_object(k) tempA = r.execute() x = 0 for key in tempA: length = key.get( "serializedlength" ) ##type = key.get("encoding") if length > 10240 : type = client. type (temp[ 1 ][x]) print temp[ 1 ][x], type ,length x = x + 1 except : print "a execption come" temp = client.scan(cursor = i,count = 1000 ) if __name__ = = '__main__' : if len (sys.argv) ! = 4 : print 'Usage: python ' , sys.argv[ 0 ], ' host port password ' exit( 1 ) db_host = sys.argv[ 1 ] db_port = sys.argv[ 2 ] db_password = sys.argv[ 3 ] r = redis.StrictRedis(host = db_host, port = int (db_port), password = db_password) nodecount = 1 keyspace_info = r.info( "keyspace" ) for db in keyspace_info: print 'check ' , db, ' ' , keyspace_info[db] find_big_key_normal(db_host, db_port, db_password, db.replace( "db" , ""))
|
我對上面的指令碼同樣進行了一個壓力測試,在redis的記憶體為15G,key的數量為2KW,ops為40K到80K之間,在這種情況下:
指令碼10分鐘跑完,完全可用。
說明:阿里雲的指令碼是支援cluster的,我這個指令碼是隻支援單機的,大家有興趣的可以自己去更改。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/430/viewspace-2803521/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Redis大key掃描Python指令碼RedisPython指令碼
- Python-FTP漏洞掃描指令碼PythonFTP指令碼
- 通過shell指令碼防止埠掃描指令碼
- 2.awd初階_指令碼掃描指令碼
- Redis bigkey解決方案Redis
- 掃描器的存在、奧普 掃描器
- MySQL中的全表掃描和索引樹掃描MySql索引
- AWVS掃描器掃描web漏洞操作Web
- 全表掃描和全索引掃描索引
- iOS 掃描二維碼/條形碼iOS
- 基於python編寫一個簡單的多執行緒埠掃描指令碼Python執行緒指令碼
- 掃描二維碼登入思路
- win10系統掃描器提示掃描不到掃描器如何解決Win10
- 掃描器
- [20210220]全索引掃描快速索引掃描的邏輯讀.txt索引
- 掃描王 for Mac專業圖片掃描工具Mac
- springboot自動掃描新增的BeanDefinition原始碼解析Spring BootBean原始碼
- 03 . Jenkins構建之程式碼掃描Jenkins
- Redis - Lua 指令碼Redis指令碼
- 【Oracle】 索引的掃描方式Oracle索引
- 什麼是漏洞掃描?漏洞掃描功能有哪些?
- python掃描埠Python
- 目錄掃描
- 埠掃描器
- DAST 黑盒漏洞掃描器 第四篇:掃描效能AST
- 電腦掃描檔案怎麼掃描 win10電腦掃描檔案方法介紹Win10
- 多位數碼管動態掃描原理分析
- SonarQube學習(三)- 專案程式碼掃描
- Redis 大key(bigkey)問題的排查與解決方案Redis
- RustScan: 能在3秒內掃描65k個埠的Rust掃描工具Rust
- TWAIN掃描識別控制元件:Web應用程式的掃描器SDKAI控制元件Web
- 獨立按鍵的掃描
- Redis使用Lua指令碼Redis指令碼
- 全表掃描和全索引掃描繼續(PG-TiDB)索引TiDB
- 京東掃描平臺EOS—JS掃描落地與實踐JS
- 簡單易用的二維碼掃描工具:QR Capture for MacAPTMac
- Zenmap(埠掃描工具)
- P2032 掃描