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指令碼
- Pythonpyclamad病毒掃描與目錄病毒掃描指令碼(轉載)Python指令碼
- Python-FTP漏洞掃描指令碼PythonFTP指令碼
- 通過shell指令碼防止埠掃描指令碼
- iOS專案冗餘資源掃描指令碼iOS指令碼
- 小白讀iOS冗餘資源掃描指令碼iOS指令碼
- iOS 使用CIDetector掃描相簿二維碼、原生掃描iOSIDE
- iOS二維碼掃描iOS
- Redis bigkey解決方案Redis
- 掃描技術和掃描工具
- iOS中二維碼掃描iOS
- MySQL中的全表掃描和索引樹掃描MySql索引
- Redis的指令碼Redis指令碼
- Oracle中存取資料掃描Table及索引的方式(全表掃描,索引掃描等)Oracle索引
- iOS 掃描二維碼/條形碼iOS
- AWVS掃描器掃描web漏洞操作Web
- 索引全掃描和索引快速全掃描的區別索引
- win10系統掃描器提示掃描不到掃描器如何解決Win10
- 掃描二維碼登入思路
- 安卓自定義二維碼掃描安卓
- IOS 使用 ZbarSDK 二維碼掃描iOS
- 掃描王 for Mac專業圖片掃描工具Mac
- Nmap掃描教程之基礎掃描詳解
- oracle 全表掃描,索引範圍掃描與塊的理解Oracle索引
- 【Oracle】 索引的掃描方式Oracle索引
- ubuntu安裝zbar二維碼掃描Ubuntu
- Android實現掃描二維碼Android
- Android二維碼生成與掃描Android
- iOS開發之掃描二維碼iOS
- 原始碼掃描裝置/軟體列表原始碼
- 基於python編寫一個簡單的多執行緒埠掃描指令碼Python執行緒指令碼
- 埠掃描器
- 安全掃描工具
- 綜合掃描工具
- 京東掃描平臺EOS—JS掃描落地與實踐JS
- DAST 黑盒漏洞掃描器 第四篇:掃描效能AST
- 藍芽掃描工具btscanner修復暴力掃描模式藍芽模式
- 電腦掃描檔案怎麼掃描 win10電腦掃描檔案方法介紹Win10