Redis中的键查询

通过要对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

	

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值