摘要:背景在平時的維護中,經常會遇到要統計某個前綴的有多少,在請求比較多的中,會直接導致阻塞??梢圆捎玫姆绞竭M行增量迭代,查詢使用減少交互,提高效率。
1.背景
在平時的維護中,經常會遇到要統計某個前綴的key有多少,在請求比較多的redis中,keys * 會直接導致阻塞。
可以采用scan的方式進行增量迭代,查詢使用pipeline減少交互,提高效率。
優點:
提供鍵空間的遍歷操作,支持游標,復雜度O(1), 整體遍歷一遍只需要O(N);
提供結果模式匹配;
支持一次返回的數據條數設置,但僅僅是個hints,有時候返回的會多;
弱狀態,所有狀態只需要客戶端需要維護一個游標;
缺點:
無法提供完整的快照遍歷,也就是中間如果有數據修改,可能有些涉及改動的數據遍歷不到;
每次返回的數據條數不一定,極度依賴內部實現;
返回的數據可能有重復,應用層必須能夠處理重入邏輯;
python中有一個封裝的函數scan_iter--查看所有元素--迭代器
腳本內容:
#!/usr/bin/env python # -*- coding: UTF-8 -*- #作用:統計某個前綴key的個數,并將其輸入到文件 #使用方法:python scan_redis.py apus* 100 __author__ = "lcl" import sys import redis import os pool=redis.ConnectionPool(host="192.168.225.128",port=6379,db=0) r = redis.StrictRedis(connection_pool=pool) #掃描匹配值,通過sys.argv傳參 match = sys.argv[1] #每次匹配數量 count = sys.argv[2] #print match #print count #總數量 total = 0 #掃描到的key輸出到文件 path = os.getcwd() #掃描到的key輸出的文件 txt = path+"/keys.txt" f = open(txt,"w") for key in r.scan_iter(match = match,count = count): # f.write("%s %s" % (key," ")) f.write(key+" ") total = total+1 f.close print "匹配: %s 的數量為:%d " % (match,total)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41550.html
摘要:單線程執行命令。文件描述符事件。內部原因不合理使用或數據結構可能由此導致慢查詢等飽和是單線程,只會使用單個持久化阻塞操作產生阻塞,對硬盤的操作產生阻塞或寫操作阻塞等。內存達到時執行內存溢出控制策略。 最近在看《Redis開發與運維》,把自己學會的知識點記錄下來,畢竟好記性不如爛筆頭。 一.Redis是什么。 Redis是一個Key-Value的NoSQL數據庫. 二.Redis的特點。...
摘要:異步事件處理本項目涉及到多種異步事件的處理。即是的粉絲,是的關注對象。模式定義優缺點推事件觸發后廣播給所有粉絲。具體來說,推模式就是事件觸發后產生,觸發事件的用戶下所有粉絲的實現中都存入該的。 項目源代碼已托管在 Github,歡迎 Star、Fork。 Q & A 問答社區 QA 是一個基于 B/S 架構而設計開發的社區網站。 showImg(https://segmentfault...
閱讀 2744·2021-11-19 09:40
閱讀 5294·2021-09-27 14:10
閱讀 2099·2021-09-04 16:45
閱讀 1462·2021-07-25 21:37
閱讀 2995·2019-08-30 10:57
閱讀 2981·2019-08-28 17:59
閱讀 1055·2019-08-26 13:46
閱讀 1408·2019-08-26 13:27