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")
相关推荐
Funny_AI_LAB5 分钟前
Zcode:智谱AI推出的轻量级 AI IDE 编程利器
人工智能·python·算法·编辑器
2501_9444522315 分钟前
活动记录 Cordova 与 OpenHarmony 混合开发实战
python
子夜江寒17 分钟前
基于 Python 使用 SVM、K-means与DBSCAN
python·支持向量机·kmeans
Blossom.11829 分钟前
GPTQ量化实战:从零手写大模型权重量化与反量化引擎
人工智能·python·算法·chatgpt·ai作画·自动化·transformer
2401_8762213431 分钟前
数据库系统概论(第6版)模拟题2
数据库
Elaine33643 分钟前
实战教学:使用 Scrapy 爬取 CSDN 文章与用户头像
python·scrapy·网络爬虫
爱学习的小可爱卢1 小时前
数据库MySQL——MySQL 可重复读隔离级别:Read View 底层原理与幻读问题深度剖析(面试必知)
数据库·mysql
lifewange1 小时前
数据库索引里面的游标是什么?
数据库·oracle
程序员佳佳1 小时前
文章标题:彻底抛弃OpenAI官方Key?实测GPT-5.2与Banana Pro(Gemini 3):这才是开发者的终极红利!
开发语言·人工智能·python·gpt·ai作画·api·midjourney
我爱学习好爱好爱2 小时前
Docker Compose部署SpringBoot2+Vue3+redis项目(Rockylinux9.6)
redis·docker·容器