<?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);
分析redis 数据脚本(备忘)
最新推荐文章于 2024-05-01 16:48:26 发布