1、分析内存占用情况

redis内存分析工具redis-rdb-tools安装部署
项目地址: https://github.com/sripathikrishnan/redis-rdb-tools

安装部署
安装Python2.7
下载redis-rdb-tools
git clone https://github.com/sripathikrishnan/redis-rdb-tools.git
安装redis-rdb-tools
pip2.7 install  python-lzf
cd redis-rdb-tools
python2.7 setup.py install

# 以json格式输出
> rdb --command json /var/redis/6379/dump.rdb

# 以json格式输出,模糊查找
> rdb --command justkeyvals --key "user.*" /var/redis/6379/dump.rdb

user003 fname Ron,sname Bumquist,
user001 fname Raoul,sname Duke,
user002 fname Gonzo,sname Dr,
user_list user003,user002,user001

# 查找确定键信息
> redis-memory-for-key -s localhost -p 6379 -a mypassword person:1

Key 			person:1
Bytes				111
Type				hash
Encoding			ziplist
Number of Elements		2
Length of Largest Element	8

# rdb文件解析并输出为csv
> rdb -c memory /var/redis/6379/dump.rdb --bytes 128 -f memory.csv
> cat memory.csv

database,type,key,size_in_bytes,encoding,num_elements,len_largest_element
0,list,lizards,241,quicklist,5,19
0,list,user_list,190,quicklist,3,7
2,hash,baloon,138,ziplist,3,11
2,list,armadillo,231,quicklist,5,20
2,hash,aroma,129,ziplist,3,11

#  输出top10的键信息
rdb -c memory  --largest=10  /app/redis/data/7000/dump.rdb

2、清理内存

使用 SCAN 和 Pipeline 命令删除

Redis 的大 Key 删除操作会导致 Redis 线程阻塞,网上关于如何删除大 Key 也有一些不少,只有通过 SCAN 扫出 Key 后一个个删除。

这里结合 pipeline 介绍更加高效的操作方法,通过 pipeline 来批量删除。

下面以每次扫出1000个 field 为例子,每次通过 pipeline 删除1000个 field 来删除一个大 Hash Key。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import redis

# 每次 SCAN 和删除 field 的数量,可以根据实际调高以提高效率
COUNT = 1000

# Redis 连接
conn = redis.StrictRedis(host='127.0.0.1', port=6379)

# 要删除的 Key 的名字
key_to_be_deleted = 'key_to_be_deleted'

# 参考函数
def del_key(redis_conn, hash_key, del_count):
    cursor = '0'
    while cursor != 0:
        pl = redis_conn.pipeline()
        cursor, data =  redis_conn.hscan(hash_key, cursor=cursor, count=del_count)
        for item in data.items():
            pl.hdel(hash_key, item[0])
        pl.execute()

def main():
    del_key(conn, key_to_be_deleted, COUNT)

if __name__ == '__main__':
    main()

删除string 类型的key

redis-cli -h 127.0.0.1 -p 6379 keys 'blk_1*' | xargs  redis-cli -h 127.0.0.1  -p 6379  del

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐