Redis中统计各种数据大小的方法
来源:互联网 发布:什么是数据稀疏性 编辑:程序博客网 时间:2024/05/22 17:08
转载于: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 是序列化后的长度,所以最终计算的值小于实际内存占用,但考虑到相对大小依然是有参考意义的。
- Redis中统计各种数据大小的方法
- SQL Server 中统计每个数据表的大小
- SQL Server 中统计每个数据表的大小
- SQL Server 中统计每个数据表的大小
- Linux中统计文件夹内各种文件类型的数量
- 在SQLite中统计本周本月数据的代码实例
- sql中统计一列中重复的数据个数
- 在DB2数据库中统计网格索引的方法
- MYSQL中统计查询结果总行数的便捷方法
- Linux中统计工程代码行数的方法
- PHP中统计目录中文件以及目录中目录的大小
- 如何统计Redis中各种数据的大小
- DSpace中统计功能的实现
- 在Vim中统计单词的个数
- HM中统计LCU的个数
- ADT中统计项目的代码量
- shell 中统计字符串出现的次数
- vim中统计字符串出现的次数
- Activity的启动流程
- linux下maven的安装
- iOS 打包上传蒲公英和AppStore出问题
- 前端给挖坑
- mysql数据库的基本操作
- Redis中统计各种数据大小的方法
- Android Activity学习笔记——Activity的启动和创建
- 游戏中的网络同步机制——LOCKSTEP
- SqlServer-Cursor讲解一
- 浅出Java Socket 编程
- iOS的影片播放 MediaPlayer 和 AVPlayer
- 解决UITableView中Cell重用机制问题
- 调用.so 文件时报错has text relocations
- 分类协议ARC