通過要對redis中存在的key查詢,挑出哪些key沒有用到而又占用較大記憶體,通過命令列沒有啥好辦法。
一般常用的方法是./redis-cli keys "*" >key 將所有key倒到檔案中,再對其編寫指令碼重定向到redis命令列中再倒出執行的結果出來。
比較麻煩費時費力,比如:要將以上key檔案中記錄的所有key倒出ttl為-1(永遠儲存),則需要在以上key檔案中的每行前面加上ttl 再定向到redis-cli中出結果。
但如果要將所有key對應的占用的記憶體多少倒出來的話,命令列就不頂用了。於是呼,某強人就搞出以下指令碼,可以將 redis中的所有key倒出來,依次倒出的有key型別、key存活期、key的容量大小(bit)。有了這幾樣引數,可以說redis的管理就明晰了許多,以下是py指令碼。
import redis
import thread
import time
import struct
r = redis.strictredis(host='192.168.0.1', port=6379, db=0)
hashset = set()
hashzset = set()
hashstring = set()
hashhash = set()
hashlist = set()
keystar = r.keys("*")
for keys in keystar:
keyt = r.type(keys)
keysize = 0
if( keyt == "set" ):
tempset = r.smembers(keystar)
for oneset in tempset:
keysize += len(oneset)
elif(keyt == "zset" ):
tempzset = r.zrange(keys,0,-1)
num = 0
for oneset in tempzset:
keysize += len(oneset)
num+=1
keysize += num * 8
elif(keyt == "string"):
string = r.get(keys)
keysize += len(string)
elif(keyt == "list" ):
#here i add ptr num in it
num = r.llen(keys)
truenum = 0
for i in range(0, num - 1):
oneval = r.lindex(keys,i)
keysize += len(oneval)
truenum += 1
keysize += (truenum - 1) * 8
elif(keyt == "hash" ):
keysh = r.hkeys(keys)
for skey in keysh:
keysize += len(skey)
valsh = r.hvals(keys)
for sval in valsh:
keysize += len(sval)
extime = r.ttl(keys)
if(extime == none):
extime = -1
setsstra = '%-*s%-*s' % (100, keys, 5, keyt)
setsstrb = '%-*s%-*s' % (20, extime,10, keysize)
setsstr = setsstra + " " + setsstrb
#setsstr = keys +" "+keyt+" "+str(keysize)
if(keyt== "hash"):
hashhash.add(setsstr)
elif(keyt=="list"):
hashlist.add(setsstr)
elif(keyt=="set"):
hashset.add(setsstr)
elif(keyt=="zset"):
hashzset.add(setsstr)
elif(keyt=="string"):
hashstring.add(setsstr)
for s in hashhash:
print s
for s in hashlist:
print s
for s in hashzset:
print s
for s in hashset:
print s
for s in hashstring:
print s
redis入門 redis常用的鍵
設定鍵值 set key value set name michael 獲取鍵值 get key get name 獲取制定健的值的序列化版本 dump key dump name 判斷該健是否存在 exists key exists name expire name 3 那麼name健在3秒後過期...
Redis 鍵的操作
coding utf 8 import redis 連線池連線 避免每次建立 釋放連線的開銷 pool redis.connectionpool host localhost port 6379 db 0 red redis.redis connection pool pool 在一次請求中指定多個...
redis中關於過期鍵的刪除策略
我們已經了解到了redis是一種記憶體資料庫,redis中資料都是以key value的形式儲存在記憶體中。由redisserver來維護和管理這部分記憶體,記憶體是何足珍貴,不須要的資料或者是已經使用過的無用的資料是不會讓它長久的存在於記憶體中的,畢竟我們還是要建設節約型社會的。所以我們能夠通過給...