Redis中统计各种数据大小的方法

 更新时间:2015年03月26日 10:29:47   投稿:junjie   我要评论

这篇文章主要介绍了Redis中统计各种数据大小的方法,本文使用PHP实现统计Redis内存占用比较大的键,需要的朋友可以参考下

如果 MySQL 数据库比较大的话,我们很容易就能查出是哪些表占用的空间;不过如果 Redis 内存比较大的话,我们就不太容易查出是哪些(种)键占用的空间了。

有一些工具能够提供必要的帮助,比如 redis-rdb-tools 可以直接分析 RDB 文件来生成报告,可惜它不能百分百实现我的需求,而我也不想在它的基础上二次开发。实际上开发一个专用工具非常简单,利用 SCAN DEBUG 等命令,没多少行代码就能实现:

复制代码 代码如下:

<?php

$patterns = array(
    'foo:.+',
    'bar:.+',
    '.+',
);

$redis = new Redis();
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);

$result = array_fill_keys($patterns, 0);

while ($keys = $redis->scan($it, $match = '*', $count = 1000)) {
    foreach ($keys as $key) {
        foreach ($patterns as $pattern) {
            if (preg_match("/^{$pattern}$/", $key)) {
                if ($v = $redis->debug($key)) {
                    $result[$pattern] += $v['serializedlength'];
                }

                break;
            }
        }
    }
}

var_dump($result);

?>

当然,前提是你需要提前总结出可能的键模式,简单但不严谨的方法是 MONITOR

复制代码 代码如下:

shell> /path/to/redis-cli monitor |
       awk -F '"' '$2 ~ "ADD|SET|STORE|PUSH" {print $4}'

此外,需要注意的是:因为 DEBUG 返回的 serializedlength 是序列化后的长度,所以最终计算的值小于实际内存占用,但考虑到相对大小依然是有参考意义的。

相关文章

  • 利用yum安装Redis的方法详解

    利用yum安装Redis的方法详解

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。这篇文章主要介绍的是利用yum安装Redis的方法,有需要的朋友们可以参考借鉴,下面来一起看看吧
    2016-11-11
  • 浅析Redis分布式锁

    浅析Redis分布式锁

    本篇文章通过实例给大家讲解了Redis分布式锁工作原理以及用法分享,有需要的朋友参考学习下吧。
    2017-12-12
  • Redis教程(十二):服务器管理命令总结

    Redis教程(十二):服务器管理命令总结

    这篇文章主要介绍了Redis教程(十二):服务器管理命令总结,本文讲解了CONFIGGETparameter、CONFIG SETparameter value、FLUSHALL等命令,需要的朋友可以参考下
    2015-04-04
  • 为啥懒 Redis 是更好的 Redis

    为啥懒 Redis 是更好的 Redis

    本文是由zicode, 李中凯, 无若翻译的英文文章Lazy Redis is better Redis,小编认为非常不错,这里推荐给大家
    2018-07-07
  • Redis安装与使用方法小结

    Redis安装与使用方法小结

    这篇文章主要介绍了Redis安装与使用方法,结合实例形式分析了Redis数据库的下载、安装、启动、设置及相关使用操作注意事项,需要的朋友可以参考下
    2018-04-04
  • Redis学习教程之命令的执行过程详解

    Redis学习教程之命令的执行过程详解

    这篇文章主要给大家介绍了关于Redis学习教程之命令的执行过程的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03
  • Redis中实现查找某个值的范围

    Redis中实现查找某个值的范围

    这篇文章主要介绍了Redis中实现查找某个值的范围,本文的题引来了Redis作者Salvatore Sanfilippo(@antirez)的回答,比较经典,需要的朋友可以参考下
    2015-06-06
  • Redis 实现队列原理的实例详解

    Redis 实现队列原理的实例详解

    这篇文章主要介绍了Redis 实现队列原理的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • redis锁机制介绍与实例

    redis锁机制介绍与实例

    今天小编就为大家分享一篇关于redis锁机制介绍与实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • redis服务器允许远程主机访问的方法

    redis服务器允许远程主机访问的方法

    今天小编就为大家分享一篇redis服务器允许远程主机访问的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05

最新评论