分析redis 数据脚本(备忘)

<?php

$config = [
    'host' => 'xxx',
    'port'  => 'xxx',
    'pass'  => 'xxx'
];

$redis = new Redis();

for ($i = 0; $i < 10; $i++) {
    $result = $redis->connect($config['host'], $config['port'], 0.3);
    if ($result) {
        break;
    }
}

if (!$result) {
    die('Can not connect redis.');
}

if ($config['pass']) {
    $redis->auth($config['pass']);
}

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

while ($keys = $redis->scan($it, $match = '*', $count = 1000)) {

    $redis->MULTI(Redis::PIPELINE);
    foreach ($keys as $key) {
        $redis->type($key);
    }
    $data = $redis->exec();

    $t = [];
    $redis->MULTI(Redis::PIPELINE);
    foreach($keys as $i => $key) {
        switch ($data[$i]) {
            case Redis::REDIS_STRING:
                $redis->debug($key);
                break;
            case Redis::REDIS_SET:
                $redis->SCARD($key);
                break;
            case Redis::REDIS_LIST:
                $redis->llen($key);
                break;
            case Redis::REDIS_ZSET:
                $redis->ZCARD($key);
                break;
            case Redis::REDIS_HASH:
                $redis->hlen($key);
                break;
            default:
                break;
        }
        //echo $key."\t".$data[$i]."\n";
    }
    $info = $redis->exec();

    $redis->MULTI(Redis::PIPELINE);
    foreach ($keys as $i => $key) {
        $size = 0;
        $fieldCount = 0;
        $type = '';
        $it_t = null;

        switch ($data[$i]) {
            case Redis::REDIS_STRING:
                $size = $info[$i]['serializedlength'];
                $s = $redis->debug($key);

                $fieldCount = 1;
                $type = "string";
                break;
            case Redis::REDIS_SET:
                $fieldCount = $info[$i];
                if($fieldCount > 10000) {
                    //$redis->SSCAN($key, $it_t, '*', 1000);
                    $redis->get('a');
                }else{
                    $redis->debug($key);
                }

                $type = "set";
                break;
            case Redis::REDIS_LIST:
                $fieldCount = $info[$i];
                if($fieldCount > 10000) {
                    //$redis->SSCAN($key, $it_t, '*', 1000);
                    $redis->get('a');
                }else{
                    $redis->debug($key);
                }

                $type = "list";
                break;
            case Redis::REDIS_ZSET:
                $fieldCount = $info[$i];
                if($fieldCount > 10000) {
                    //$redis->ZSCAN($key, $it_t, '*', 1000);
                    $redis->get('a');
                }else{
                    $redis->debug($key);
                }

                $type = "zset";
                break;
            case Redis::REDIS_HASH:
                $fieldCount = $info[$i];

                if($fieldCount > 10000) {
                    //$redis->HSCAN($key, $it_t, '*', 1000);
                    $redis->get('a');
                }else{
                    $redis->debug($key);
                }

                $type = "hash";
                break;
            default:
                break;
        }
    }
    $sizeData = $redis->exec();

    //$redis->MULTI(Redis::PIPELINE);
    foreach ($keys as $i => $key) {
        $size = 0;
        $fieldCount = 0;
        $type = '';
        $it_t = null;

        switch ($data[$i]) {
            case Redis::REDIS_STRING:
                $size = $info[$i]['serializedlength'];
                //$s = $redis->debug($key);

                $fieldCount = 1;
                $type = "string";
                break;
            case Redis::REDIS_SET:
                $fieldCount = $info[$i];
                if($fieldCount > 10000) {
                    $t = $redis->SSCAN($key, $it_t, '*', 1000);
                    //$t = $sizeData[$i];
                    $size = intval(strlen(implode('', $t)) /  count($t)) * $fieldCount;
                }else{
                    //$s = $redis->debug($key);
                    $s = $sizeData[$i];
                    $size = $s['serializedlength'];
                }

                $type = "set";
                break;
            case Redis::REDIS_LIST:
                $fieldCount = $info[$i];
                //$redis->debug($key);
                if ($fieldCount > 10000) {
                    $t = $redis->LRANGE($key, 0, 1000-1);
                    $size = intval(strlen(implode('', $t)) /  count($t)) * $fieldCount;
                } else {
                    $s = $sizeData[$i];
                    $size = $s['serializedlength'];
                }

                $type = "list";
                break;
            case Redis::REDIS_ZSET:
                $fieldCount = $info[$i];
                if($fieldCount > 10000) {
                    $t = $redis->ZSCAN($key, $it_t, '*', 1000);
                    //$t = $sizeData[$i];
                    $size = intval(strlen(implode('', $t)) / count($t)) * $fieldCount;
                }else{
                    //$s = $redis->debug($key);
                    $s = $sizeData[$i];
                    $size = $s['serializedlength'];
                }

                $type = "zset";
                break;
            case Redis::REDIS_HASH:
                $fieldCount = $info[$i];

                if($fieldCount > 10000) {
                    $t = $redis->HSCAN($key, $it_t, '*', 1000);
                    foreach ($t as $_key => $r) {
                        $t[$_key] = $r.$_key;
                        //echo $t[$_key];exit;
                    }
                    //$t = $sizeData[$i];
                    $size = intval(strlen(implode('', $t)) /  count($t)) * $fieldCount;
                }else{
                    //$s = $redis->debug($key);
                    $s = $sizeData[$i];
                    $size = $s['serializedlength'];
                }

                $type = "hash";
                break;
            default:
                break;
        }
        echo $key."\t".$type."\t".$fieldCount."\t".$size."\n";
    }
    //exit;
    //var_dump($loop++, $result);
}

//var_dump($result);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值