目录

  1. stats sizes 命令简介
  2. stats sizes 命令的语法
  3. stats sizes 命令的输出解释
  4. 使用 Telnet 查看 Memcached Sizes 信息
  5. 不同编程语言的 stats sizes 示例
  6. 参考资料

1. stats sizes 命令简介

stats sizes 命令是 Memcached 提供的一个用于查看缓存中所有存储项大小统计的命令。此命令返回存储在 Memcached 中不同大小范围的缓存项数量。它可以帮助用户理解缓存中项的大小分布,提供关于存储空间使用情况的详细信息。

执行 stats sizes 命令后,Memcached 会返回不同大小范围(例如 1–10 字节,10–100 字节等)内的缓存项数量和占用的内存量。通过这些数据,用户可以进一步优化缓存设置和性能。


2. stats sizes 命令的语法

stats sizes

此命令不需要任何额外的参数。当执行 stats sizes 时,Memcached 会列出所有缓存项的大小范围、该范围内的项的数量及所占内存大小。


3. stats sizes 命令的输出解释

执行 stats sizes 命令后的输出包括每个缓存项大小范围的统计信息。输出内容通常包含以下字段:

  • size:<size_range>:number:表示该大小范围内的缓存项数量。<size_range> 是缓存项大小的范围,单位为字节。例如,size:1-10:number 表示存储大小为 1 到 10 字节的缓存项数量。
  • size:<size_range>:age:表示该大小范围内的缓存项的年龄(以秒为单位)。
  • size:<size_range>:evicted:表示该大小范围内的缓存项被淘汰的数量。

例如,执行 stats sizes 后可能会看到如下输出:

STAT size:1-10:number 512
STAT size:11-100:number 1024
STAT size:101-1000:number 256

这意味着:

  • 大小在 1 到 10 字节之间的缓存项有 512 个。
  • 大小在 11 到 100 字节之间的缓存项有 1024 个。
  • 大小在 101 到 1000 字节之间的缓存项有 256 个。

4. 使用 Telnet 查看 Memcached Sizes 信息

4.1 连接 Memcached

telnet 127.0.0.1 11211

4.2 使用 stats sizes 查看缓存项大小信息

stats sizes

返回结果:

STAT size:1-10:number 512
STAT size:11-100:number 1024
STAT size:101-1000:number 256

4.3 使用 stats sizes 查看特定大小范围的信息

如果需要查看某个特定大小范围内的缓存项统计信息,可以通过该命令直接过滤大小范围信息(虽然 Memcached 没有提供直接按范围查询的功能,通常可以根据输出数据自己筛选)。


5. 不同编程语言的 stats sizes 示例

5.1 PHP stats sizes 示例

<?php
$memcached = new Memcached();
$memcached->addServer("127.0.0.1", 11211);

// 获取 Memcached 的 sizes 统计信息
$stats = $memcached->getStats();

// 输出所有缓存项大小的信息
foreach ($stats as $server => $stat) {
    echo "Server: $server\n";
    foreach ($stat as $key => $value) {
        if (strpos($key, 'size') === 0) { // 只输出 sizes 相关的信息
            echo "$key: $value\n";
        }
    }
}
?>


5.2 Python stats sizes 示例

from pymemcache.client import base

client = base.Client(('127.0.0.1', 11211))

# 获取 Memcached 的 sizes 统计信息
stats = client.get_stats()

# 输出所有缓存项大小的信息
for server, stat in stats:
    print(f"Server: {server}")
    for key, value in stat.items():
        if key.startswith('size'):  # 只输出 sizes 相关的信息
            print(f"{key}: {value}")


5.3 Java stats sizes 示例

import net.spy.memcached.MemcachedClient;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.Map;

public class MemcachedTest {
    public static void main(String[] args) throws IOException {
        MemcachedClient client = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));

        // 获取 Memcached 的 sizes 统计信息
        Map<String, String> stats = client.getStats();
        for (Map.Entry<String, String> entry : stats.entrySet()) {
            if (entry.getKey().startsWith("size")) {  // 只输出 sizes 相关的信息
                System.out.println(entry.getKey() + ": " + entry.getValue());
            }
        }

        client.shutdown();
    }
}


5.4 Node.js stats sizes 示例

const Memcached = require('memcached');
const memcached = new Memcached("127.0.0.1:11211");

// 获取 Memcached 的 sizes 统计信息
memcached.stats(function(err, stats) {
    if (err) {
        console.error(err);
    } else {
        console.log("Sizes Stats:");
        for (let key in stats) {
            if (key.startsWith('size')) {  // 只输出 sizes 相关的信息
                console.log(`${key}: ${stats[key]}`);
            }
        }
    }
});


6. 参考资料