`
zhaomengsen
  • 浏览: 197034 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

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

阅读更多
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/125.html?1455853369
如果 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 是序列化后的长度,所以最终计算的值小于实际内存占用,但考虑到相对大小依然是有参考意义的。

分享到:
评论

相关推荐

    spring-boot mybaits shiro redis整合

    注解redis缓存数据,Spring-session和redis实现分布式session同步(建议按功能模块划分系统)。 6、日志 =========== logback打印日志,业务日志和调试日志分开打印。同时基于时间和文件大小分割日志文件。 9、...

    spring-boot mybaits spring security redis整合

    注解redis缓存数据,Spring-session和redis实现分布式session同步(建议按功能模块划分系统)。 6、日志 =========== logback打印日志,业务日志和调试日志分开打印。同时基于时间和文件大小分割日志文件。 9、...

    derrick:检查 Redis 数据库并打印有关密钥的统计信息

    检查 Redis 数据库并打印有关密钥的统计信息 安装 $ gem install derrick 用法 $ derrick inspect redis://127.0.0.1:6379/5 它将打印如下内容: Pattern Count Exp Type shop:*:name 10000 100% string shop:*:...

    rma4go::magnifying_glass_tilted_right: golang 的 redis 内存分析器

    它轻巧易用,并打印出漂亮的降价表功能rma4go 为redis提供了多维度的统计,主要支持的维度如下键大小、数据大小统计密钥过期统计大关键统计不同类型的关键统计数据用法如何在你的代码中使用 go get github....

    JAVA上百实例源码以及开源项目源代码

     这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 ...

    基于Java的SSM传染病监测防控管理系统程序源代码+数据库 本系统前端部分基于MVVM模式进行开发,采用B/S模式,后端部分

    使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实现前后端通信,Element UI组件库使页面快速成型,项目前端通过栅格布局实现响应式,可适应PC端、平板端、手机端等不同屏幕大小尺寸的完美布局展示。...

    JAVA上百实例源码以及开源项目

     这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 ...

    【分布式事务----LCN】LCN原理及使用方式.docx

    当需要回滚的时候就采用这些记录数据回滚数据库,目前锁实现依赖redis分布式锁控制。 该模式的特点: - 该模式同样对代码的嵌入性低。 - 该模式仅限于对支持SQL方式的模块支持。 - 该模式由于每次执行SQL之前...

    E2EE互联网服务器套件2.7.2

    * 需要在网站配置中加入配置项“统计状态: 真” 修复了 “上下文_绑定*”相关的方法可能绑定失败导致奔溃的问题(感谢 银河世纪)。 [存取列表] 修复了 主键更名奔溃的问题(感谢 银河世纪)。 修复了 从网络载入 方法的...

    iBase4J分布式系统-其他

    6、缓存和Session:注解redis缓存数据;shiro实现redis分布式session同步,重启服务会话不丢失。7、多系统交互:Dubbo,ActiveMQ多系统交互,ftp/sftp/fastdafs发送文件到独立服务器,使文件服务分离。8、前后端分离...

    merlin:针对HPC工作流程的机器学习

    这种大小的数据集可能足够大,可以训练可以模仿您的HPC应用程序的深度神经网络,用于诸如设计优化,不确定性量化和统计实验推断之类的事情。 梅林(Merlin)曾被用于研究惯性约束聚变,极紫外光的产生,结构力学和...

    DSShop单用户TP5框架B2C开源商城源码-PHP

    7、支持Redis/Memcached 8、支持Linux/Unix/Windows服务器,支持Apache/IIS/Nginx等 9、支持电脑PC端、手机端(微信端)、小程序 DSShop商城系统功能: 1、设置:帐号同步、上传设置、SEO设置、邮箱短信、支付方式、...

Global site tag (gtag.js) - Google Analytics