python3 统计redis中每个DB占用的内存大小

在一些业务中,会使用多个DB来缓存不同类型的业务数据,有时候redis占用内存过高,造成服务异常。

redis可以通过dbsize命令来查看当前选择的DB的key的数量,有时候仅仅看key的数量可能还不能直观反映哪块业务数据占用内存多,redis也没有直接的命令可以查询每个DB占用的内存大小。

这时候通过python开发一个脚本统计每个DB占用的内存大小,可以大致分析是哪些类型业务占用了过高内存。以下是一个统计redis内存并删除占用内存超过10kB的key的样例。

安装python3 redis依赖

bash 复制代码
pip3 install redis

复制保存为checkRedisMem.py,运行

bash 复制代码
python3 checkRedisMem.py
python 复制代码
# -*- coding: utf-8 -*-
import redis
import random

# Connect to Redis server
r = redis.StrictRedis(host='127.0.0.1', port=6379, password='password')

# Get the number of databases
num_dbs = r.config_get('databases')['databases']

# Iterate over each database
for db_num in range(int(num_dbs)):
    r.select(db_num)  # Select the current database

    # Get all keys in the current database
    keys = r.keys('*')

    # Calculate memory usage for each key and sum them up
    # total_memory = sum(r.memory_usage(key) for key in keys)
    total_memory = 0
    delete_keys = 0
    dbsize = len(keys)
    for key in keys:
        mem = r.memory_usage(key)
        total_memory = total_memory + mem
        # 删除占用内存超过10kB的key
        if mem > 10*1024:
            mem = mem/1024
            delete_keys = delete_keys + 1
            #print(f"DB {db_num} {key}: {mem} kB, delete it!")
            r.delete(key)
        total_memory = total_memory / (1024*1024)
    print(f"DB {db_num}: delete {delete_keys} keys")
    print(f"DB {db_num}: {dbsize} keys, {total_memory} MB")
相关推荐
归去来?33 分钟前
记录一次从https接口提取25G大文件csv并落表的经历
大数据·数据仓库·hive·python·网络协议·5g·https
喵手34 分钟前
Python爬虫零基础入门【第三章:Requests 静态爬取入门·第1节】你的第一个爬虫:抓取页面并保存 HTML!
爬虫·python·爬虫实战·python爬虫工程化实战·requests静态爬取·抓取网页并保存html·零基础入门python爬虫
喵手35 分钟前
Python爬虫零基础入门【第三章:Requests 静态爬取入门·第2节】伪装与会话:Headers、Session、Cookie(合规使用)!
爬虫·python·python爬虫实战·python爬虫工程化实战·requests静态爬取·伪装与会话·零基础python爬虫入门
小白学大数据1 小时前
绕过拼多多 App 反抓包机制的综合逆向解决方案
开发语言·爬虫·python·自动化
使者大牙1 小时前
【单点知识】 Python装饰器介绍
开发语言·数据库·python
Jackson@ML1 小时前
2026最新版Sublime Text 4安装使用指南
java·python·编辑器·sublime text
TonyLee0171 小时前
半监督学习介绍
人工智能·python·深度学习·机器学习
kong79069281 小时前
Python核心语法-Python自定义模块、Python包
开发语言·python·python核心语法
数智工坊1 小时前
【操作系统-文件管理】
数据结构·数据库
OLOLOadsd1232 小时前
基于Mask-RCNN和RegNetX的茎蛀虫检测识别系统详解
python