统计redis大key信息(前topN)

相关包下载链接

https://github.com/sripathikrishnan/redis-rdb-tools/releases
https://pypi.org/project/python-lzf/
https://pypi.python.org/simple/redis/

安装

pip install python-lzf-0.2.4.tar.gz
pip install redis-2.10.6.tar.gz
pip install rdbtools-0.1.12.tar.gz

解析redis RDB文件

建议放在其他测试环境执行,避免对生产主机的资源有影响
通过一下模拟一些大key
cat /root/test.txt | /dbdata/redis/app1/redis4010/bin/redis-cli -h 5.5.5.102 -p 6379 -a abc123 --pipe
cat /root/test2.txt | /dbdata/redis/app1/redis4010/bin/redis-cli -h 5.5.5.102 -p 6379 -a abc123 --pipe
rdb.py -c memory /dbdata/dumpdir/dump.rdb > /dbdata/dumpdir/memory.csv

删除掉表头信息

sed -i ‘1d‘ memory.csv
即(database,type,key,size_in_bytes,encoding,num_elements,len_largest_element)

在mysql中创建表

CREATE TABLE memory (
database int(128) DEFAULT NULL,
type varchar(128) DEFAULT NULL,
KEY varchar(128) not NULL,
size_in_bytes bigint(20) DEFAULT NULL,
encoding varchar(128) DEFAULT NULL,
num_elements bigint(20) DEFAULT NULL,
len_largest_element varchar(128) DEFAULT NULL,
PRIMARY KEY (KEY));

导入到mysql中

load data infile ‘/dbdata/dumpdir/memory.csv‘
into table memory
fields terminated by ‘,‘ optionally enclosed by ‘"‘ escaped by ‘"‘
lines terminated by ‘\n‘;

查看top N的big keys信息

select * from memory order by size_in_bytes desc limit N;

原文地址:https://www.cnblogs.com/imdba/p/10116500.html

时间: 2024-11-23 06:07:06

统计redis大key信息(前topN)的相关文章

redis 删除大key集合的方法

redis大key,这里指的是大的集合数据类型,如(set/hash/list/sorted set),一个key包含很多元素.由于redis是单线程,在删除大key(千万级别的set集合)的时候,或者清理过期大key数据时,主线程忙于删除这个大key,会导致redis阻塞.崩溃,应用程序异常的情况. 一个例子 线上redis作为实时去重的一个工具,里面有6千万的用户guid,这么一个set集合,如果直接使用del删除,会导致redis严重阻塞. 1 10.1.254.18:6380> info

redis过期键删除策略以及大key删除方法

今天遇到了一个前同事挖的坑,刷新缓存中商品信息时先让key过期,然后从数据库里取最新数据然后再放到缓存中,他是这样写的 redisTemplate.expire(CacheConst.GOOGS_PREFIX,1,TimeUnit.MILLISECONDS); 设置key过期为一毫秒,导致缓存中有时没有商品信息,因为在这一毫秒内有可能已经从数据库中取到了最新数据,并且又放到了缓存中,一毫秒过后key过期了,缓存中就没了商品信息. 正确的应该这样写redisTemplate.expire(Cach

【Redis】 key 很少但是used_memory很大

环境: CentOS 6.5 Redis 2.8 问题描述: 最近几天有一个使用了俩年的redis实例的内存使用情况的增长速率很是诡异,突然从1G增长到了4个多G,一开始认为是因为新项目上线有在使用,但是询问了开发发现新上线的项目并没有使用这个redis实例.并且发现一个比较诡异的情况就是在这个redis上面只有61个hash类型的key,并且使用redis-cli -p 6379 --bigkeys 进行大key分析,分析出来的情况如下: # Scanning the entire keysp

如何提取Redis中的大KEY

工作中,经常有些Redis实例使用不恰当,或者对业务预估不准确,或者key没有及时进行处理等等原因,导致某些KEY相当大. 那么大Key会带来哪些问题呢? 如果是集群模式下,无法做到负载均衡,导致请求倾斜到某个实例上,而这个实例的QPS会比较大,内存占用也较多:对于Redis单线程模型又容易出现CPU瓶颈,当内存出现瓶颈时,只能进行纵向库容,使用更牛逼的服务器. 涉及到大key的操作,尤其是使用hgetall.lrange 0 -1.get.hmget 等操作时,网卡可能会成为瓶颈,也会到导致堵

导出redis中某个大key中的值并与数据库中作对比

今天测试凤凰FM 数据导入项目 遇到一个问题 redis set key 中的数据条数比t_aduio表中还多 (可能是数据转码有失败的) 详情:redis key:fenghuang_audio_origin_id 中有5194条记录,但是 t_audio表存进去了5189条数据 我想知道是娜几条数据转码失败了,所以就需要把redis key中的数据导出  网上查找http://www.runoob.com/redis/redis-sets.html 找到了命令:SMEMBERS key  返

Redis中Key相关的常用指令详解

Redis是一个开源的使用ANSI C 语言编写.支持网络.同memcache相比在Redis下可以实现基于内存亦可持久化的日志型.Key-Value 类型的NoSQL数据库,且在Redis中Key的类型也更为丰富.所以较为广泛的在生产环境中使用,在这里就说一说Redis中Key相关的常用指令. 首先,先要说明下在Redis下Key,Redis的key是字符串类型,但是key 中不能包括边界字符(""),由于key 不是binary safe的字符串,所以像"my key&q

7.redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?

作者:中华石杉 面试题 redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗? 面试官心理分析 在前几年,redis 如果要搞几个节点,每个节点存储一部分的数据,得借助一些中间件来实现,比如说有 codis,或者 twemproxy,都有.有一些 redis 中间件,你读写 redis 中间件,redis 中间件负责将你的数据分布式存储在多台机器上的 redis 实例中. 这两年,redis 不断在发展

Redis状态和信息查看

转自:http://my.oschina.net/tongyufu/blog/405612 redis-cli连接服务器后,使用info命令查看Redis信息和状态: INFO [section] 以一种易于解释(parse)且易于阅读的格式,返回关于 Redis 服务器的各种信息和统计数值. 通过给定可选的参数 section ,可以让命令只返回某一部分的信息: server 部分记录了 Redis 服务器的信息,它包含以下域: redis_version : Redis 服务器版本 redi

redis集群状态信息维护脚本

最近在做redis相关的东西,需要把2台redis切分成16个shard, 16个主shard分布在4台128G的机器上,从shard分布在12台64G的机器上,由于机器太多,查询相关的信息不太方便,特别是我要手动的去查询或者删除某些信息就需要去每台机器上查看,当然也可以通过相关的程序来查询和删除,这里主要介绍如何利用linux shell来实现这个目标. 具体的脚本内如如下: #!/bin/bash topic=(xx.x.xx.xx:6385 xx.x.xxx.xx:6387) topic_