Redis内存分析与清理

最近 redis 的内存告警,需要对 redis 内存进行一次清理,要清理就要先进行 redis 的内存分析,看有哪些比较大的 key 占用。

由于我们用的腾讯云上的 redis,每天会备份一个 rdb 文件,我们使用内网把 rdb 文件下载下来。

网上搜索之后,决定采用这个工具:https://github.com/xueqiu/rdr ,可视化界面很漂亮,展示了 top key 和 前缀 key 的统计信息。具体介绍可以查看这片文章:如果优雅的分析redis里存了啥?

key 的导出使用到了比较知名的 redis-rdb-tools 工具。

下面记录具体步骤。

导出 redis rdb 文件

分析 key

清理 key

使用 python 脚本来进行清理:

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

sys.path.append("/data2/wwwroot/apps/sport_caochaobin")

from ydredis import common_redis
import time
import common


class Handle(object):
    def __init__(self):
        self.redis_topic = common_redis.redis_topic()	# python redis客户端

    def delete_redis_expire_key(self, filename, prefix):
        print "============== opend {} ==========".format(filename)
        # 使用 redis pipeline 操作
        pipe = self.redis_topic.pipeline(transaction=False)
        index = 0
        count = 0
        with open(filename, 'r') as f:
            for line in f:
                if key.startswith(prefix):
                    index += 1
                    pipe.delete(key)
                    print "{}. '{}'  has been killed!".format(index, key)
                    # 每遍历 1000 条执行一次,停顿 1s
                    if index % 1000 == 0:
                        ret = pipe.execute()
                        print "ret:", ret
                        time.sleep(1)
        pipe.execute()


if __name__ == "__main__":
    handle = Handle()
    filename = "./yd_en_keys_uniq.txt"
    prefix = "yd_en_2019"
    handle.delete_redis_expire_key(filename, prefix)

 


关注微信公众账号「曹当家的」,订阅最新文章推送

Table of Contents