<?php
namespace App\Console\Commands\Tools;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class RedisMemoryAnalyse extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'Tools/RedisMemoryAnalyse {host} {port} {password?}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'redis key 监控分析工具 - 手动执行此脚本';
protected $redis;
protected $host;
protected $port;
protected $password;
/**
* OrderSync constructor.
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
ini_set('memory_limit', '2048M');
try {
$this->host = $this->argument('host');
$this->port = $this->argument('port');
$this->password = $this->argument('password');
$this->redis = new \Redis();
$this->redis->connect($this->host, $this->port);
$this->redis->auth($this->password);
for ($i = 0; $i < 16; $i++) {
$this->anlayseByDb($i);
}
} catch (\Exception $e) {
$this->_log($e->getFile(). " line: ". $e->getLine());
$this->_log($e->getMessage());
}
}
public function anlayseByDb($db)
{
$this->redis->select($db);
$keys = $this->redis->keys("*");
if (! empty($keys)) {
$analy = [];
foreach ($keys as $key) {
$result = shell_exec("redis-cli -h {$this->host} -p {$this->port} -a {$this->password} -n {$db} memory usage '{$key}'");
$analy[] = [
'key' => $key,
'ttl' => $this->redis->ttl($key),
'memory' => trim(explode('"', $result)[0])
];
file_put_contents("/www/wwwroot/linsd/dh_erp_php/{$db}.csv", sprintf("%s,%s,%s\r\n",
$key,
$this->redis->ttl($key),
trim(explode('"', $result)[0])
), FILE_APPEND);
}
}
}
/**
* log
*/
protected function _log($str)
{
print("[" . date("Y-m-d H:i:s") . "]".$str . "\n");
}
}
php laravel 分析 redis 各个key的内存占用情况
于 2023-03-17 17:53:59 首次发布