getMessage()}", ['key' => $key]); return false; } } /** * 获取数据(自动反序列化数组) * @param string $key 键名 * @param mixed $default 默认值 * @return mixed */ public static function get(string $key, $default = null) { try { $value = Redis::get($key); if ($value === false || $value === null) { return $default; } // 尝试JSON解码 $decoded = json_decode($value, true); return json_last_error() === JSON_ERROR_NONE ? $decoded : $value; } catch (\Throwable $e) { Log::error("Redis读取失败: {$e->getMessage()}", ['key' => $key]); return $default; } } /** * 删除键 * @param string|array $keys 键名或键名数组 * @return int 删除的键数量 */ public static function del($keys): int { try { return Redis::del(...(array)$keys); } catch (\Throwable $e) { Log::error("Redis删除失败: {$e->getMessage()}", ['keys' => $keys]); return 0; } } /** * 检查键是否存在 * @param string $key 键名 * @return bool */ public static function exists(string $key): bool { try { return (bool)Redis::exists($key); } catch (\Throwable $e) { Log::error("Redis检查存在失败: {$e->getMessage()}", ['key' => $key]); return false; } } /** * 设置带过期时间的缓存 * @param string $key 键名 * @param mixed $value 值 * @param int $ttl 过期时间(秒) * @return bool */ public static function setex(string $key, $value, int $ttl): bool { return self::set($key, $value, $ttl); } /** * 哈希表设置字段值 * @param string $key 键名 * @param string $field 字段名 * @param mixed $value 值 * @return bool */ public static function hSet(string $key, string $field, $value): bool { try { $storageValue = is_array($value) ? json_encode($value, JSON_UNESCAPED_UNICODE) : $value; return Redis::hSet($key, $field, $storageValue); } catch (\Throwable $e) { Log::error("Redis哈希设置失败: {$e->getMessage()}", ['key' => $key, 'field' => $field]); return false; } } /** * 哈希表获取字段值 * @param string $key 键名 * @param string $field 字段名 * @param mixed $default 默认值 * @return mixed */ public static function hGet(string $key, string $field, $default = null) { try { $value = Redis::hGet($key, $field); if ($value === false) { return $default; } $decoded = json_decode($value, true); return json_last_error() === JSON_ERROR_NONE ? $decoded : $value; } catch (\Throwable $e) { Log::error("Redis哈希获取失败: {$e->getMessage()}", ['key' => $key, 'field' => $field]); return $default; } } /** * 自增计数器 * @param string $key 键名 * @param int $increment 增量 * @return int|false */ public static function incr(string $key, int $increment = 1) { try { return $increment === 1 ? Redis::incr($key) : Redis::incrBy($key, $increment); } catch (\Throwable $e) { Log::error("Redis自增失败: {$e->getMessage()}", ['key' => $key]); return false; } } /** * 获取剩余过期时间 * @param string $key 键名 * @return int 剩余秒数(-2表示键不存在,-1表示没有设置过期时间) */ public static function ttl(string $key): int { try { return Redis::ttl($key); } catch (\Throwable $e) { Log::error("Redis获取TTL失败: {$e->getMessage()}", ['key' => $key]); return -2; } } }