分析redis 数据脚本(备忘)

来源:互联网 发布:win10网络图标没了 编辑:程序博客网 时间:2024/05/19 19:59
<?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
原创粉丝点击