`
zhaomengsen
  • 浏览: 207328 次
  • 性别: 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 是序列化后的长度,所以最终计算的值小于实际内存占用,但考虑到相对大小依然是有参考意义的。

分享到:
评论

相关推荐

    Redis 和 RedisDesktopManager

    它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,这使得Redis在各种应用场景中表现出色。RedisDesktopManager是用于图形化管理Redis服务器的工具,方便用户进行数据操作和监控。 Redis的主要特性包括...

    tair与redis比较

    * 持久化适用场景:数据可以以key/value的形式存储,数据需要持久化,数据量很大,并且有较大的增长可能性,单个数据大小不是很大,一般在KB级别,数据的读写比例较高。 Tair与Redis比较 Tair和Redis都是分布式...

    redis客户端免安装版

    它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,适用于处理各种数据存储需求。本资源提供的“redis客户端免安装版”是一个便捷的Redis管理工具,无需安装过程,解压后即可直接运行,方便用户快速地...

    Redis应用场景--Redis作者谈Redis应用场景

    在需要统计某一时间段内去重后的数据数量时,Redis的`Set`数据结构提供了一个简洁高效的解决方案。 - **实现步骤**: - 将所有相关数据添加到`Set`中。 - 使用`SCARD`命令获取当前`Set`的大小,即为去重后的数据...

    Redis官方客户端0.9.4

    5. **数据操作**:支持对Redis的各种数据结构(如字符串、哈希、列表、集合、有序集合)进行添加、修改、删除等操作。 6. **命令行接口**:内置了命令行工具,用户可以直接输入Redis命令执行,方便调试和测试。 7....

    Redis中最常用的String数据结构.docx

    除此之外,Redis对于各种内部数据结构的精妙设计也是其性能卓越的关键因素之一。本文将重点探讨Redis中最常用的String数据结构——SDS(Simple Dynamic String),并揭示其背后的设计理念与优化策略。 #### 位操作...

    Redis实战.pdf

    - **RDB(Redis Database Persistence)**:定期将内存中的数据快照保存到硬盘上,提供灾难恢复能力。 - **AOF(Append Only File)**:记录每次写操作的日志,以追加方式写入文件,保证数据不丢失。 4. **Redis...

    Redisdesktop mac版本

    1. **实时数据浏览**:RedisDesktop 允许用户实时查看和编辑存储在 Redis 服务器中的键值对。你可以通过简单的界面来浏览、搜索、添加、修改或删除键,这对于调试和测试非常有帮助。 2. **多服务器管理**:该工具...

    redis开发运维实践指南

    Redis作为运行在内存中的数据结构服务器,其重要性在开发和运维领域日益凸显。本实践指南针对Redis的开发和运维提供了详细的操作指南,内容覆盖了从基础的数据操作到复杂的系统架构设计,适用于Redis开发和运维人员...

    linux-redis

    Redis的一大特点是其运行在内存中,提供了极高的读写速度,但同时这也意味着数据量受到物理内存的限制。 在Linux环境下部署Redis,首先要确保系统中安装了Redis服务器。通常,可以通过包管理器(如apt-get或yum)...

    redis.dll 及redis安装文件 PHP5.4

    在PHP5.4中使用Redis,可以实现各种功能,例如: 1. **数据存储**:Redis支持字符串、哈希、列表、集合和有序集合等多种数据结构,可以方便地存储和操作数据。 2. **缓存**:利用Redis的高读取速度,可以将常用数据...

    redis 5.X版本,redis 5.X版本

    Redis 5.0 引入了 Stream 数据类型,它是一种新的持久化数据结构,用于处理时序数据。Stream 类似于日志,允许应用程序记录一系列有序事件。每个事件由一个唯一的 ID(XID)和一组字段(field-value 对)组成,可以...

    redis-desktop-manager-2019.0.0(单机+集群连接).zip

    4. 数据导入导出:可以将Redis中的数据导出为JSON、CSV、XML等格式,便于数据分析或备份;同时,也可以将这些文件导入到Redis中,快速填充测试数据。 三、集群模式下的Redis管理 1. 集群配置:对于集群模式,Redis...

    Redis Desktop Manager2019.0

    7. **可视化统计**:提供键的统计信息,如键的数量、大小等,有助于监控数据库状态。 8. **安全性**:支持SSL加密连接,确保数据传输的安全性。 9. **多语言支持**:界面可切换为多种语言,包括中文,方便不同地区...

    redis笔记.rar

    - Redis支持持久化,可以将内存中的数据定期保存到磁盘,以防止数据丢失。 2. Redis常用命令: - SET与GET:用于设置和获取键值。 - LPUSH/RPUSH与LPOP/RPOP:在列表两端添加或删除元素。 - HSET/HGET:操作...

    redisdesktopmanager 64位

    6. **可视化统计**:该工具提供关于键值大小、内存使用情况等的可视化统计,帮助用户监控数据库状态。 7. **命令行支持**:虽然主要以GUI形式操作,但工具也提供了命令行输入框,方便执行自定义的Redis命令。 8. *...

    redis最新安装包.zip

    - 内存存储:Redis默认将所有数据存储在内存中,提供极快的读写速度,但同时也需要注意内存管理。 - 持久化:为了防止数据丢失,Redis支持RDB(快照)和AOF(追加日志)两种持久化方式,确保数据安全。 - 主从...

    基于redis实现昨日今日浏览量统计-案例源码

    它的数据类型包括字符串、哈希、列表、集合和有序集合,这些数据结构使得Redis能够处理各种复杂的数据操作。 在“基于redis实现昨日今日浏览量统计”这个案例中,我们可以假设每个浏览行为被表示为一个独立的事件,...

Global site tag (gtag.js) - Google Analytics