server/app/Utils/RedisInfoHelper.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]);
}
}