71 lines
2.4 KiB
PHP
71 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Utils;
|
|
|
|
use Hyperf\Redis\RedisFactory;
|
|
use Hyperf\Redis\RedisProxy;
|
|
use function Hyperf\Support\make;
|
|
|
|
class RedisInfoHelper
|
|
{
|
|
protected static RedisProxy|null $redis = null;
|
|
|
|
/**
|
|
* 初始化 Redis 实例
|
|
*/
|
|
protected static function getRedis(): RedisProxy|null
|
|
{
|
|
if (!self::$redis) {
|
|
$factory = make(RedisFactory::class);
|
|
// 默认使用 default pool
|
|
self::$redis = $factory->get('default');
|
|
}
|
|
return self::$redis;
|
|
}
|
|
|
|
/**
|
|
* 获取 Redis 运行信息
|
|
*/
|
|
public static function getInfo(): array
|
|
{
|
|
$redis = self::getRedis();
|
|
$info = $redis->info(); // 返回数组形式
|
|
|
|
// 解析需要的字段
|
|
$used_memory = isset($info['used_memory']) ? self::formatBytes($info['used_memory']) : '0 B';
|
|
$used_cpu = isset($info['used_cpu_sys']) && isset($info['used_cpu_user'])
|
|
? round($info['used_cpu_sys'] + $info['used_cpu_user'], 2)
|
|
: 0;
|
|
|
|
return [
|
|
'version' => $info['redis_version'] ?? 'unknown',
|
|
'mode' => $info['redis_mode'] ?? 'unknown',
|
|
'port' => $info['tcp_port'] ?? 0,
|
|
'clients' => $info['connected_clients'] ?? 0,
|
|
'uptime_days' => $info['uptime_in_days'] ?? 0,
|
|
'used_memory' => $used_memory,
|
|
'used_cpu' => $used_cpu . " 秒",
|
|
'maxmemory' => isset($info['maxmemory']) ? self::formatBytes($info['maxmemory']) : 'unlimited',
|
|
'aof_enabled' => isset($info['aof_enabled']) && $info['aof_enabled'] == 1,
|
|
'rdb_last_bgsave_status' => $info['rdb_last_bgsave_status'] ?? 'unknown',
|
|
'keys' => $info['db0'] ?? '0',
|
|
'net_input_bytes' => isset($info['total_net_input_bytes']) ? self::formatBytes($info['total_net_input_bytes']) : '0 B',
|
|
'net_output_bytes' => isset($info['total_net_output_bytes']) ? self::formatBytes($info['total_net_output_bytes']) : '0 B',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* 格式化字节为易读形式
|
|
*/
|
|
protected static function formatBytes(int $bytes): string
|
|
{
|
|
if ($bytes <= 0) {
|
|
return '0 B';
|
|
}
|
|
|
|
$units = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
$i = (int) floor(log($bytes, 1024));
|
|
return sprintf('%.2f %s', $bytes / pow(1024, $i), $units[$i]);
|
|
}
|
|
}
|