<?php namespace Lib; /** * redis 链接池 swoole内置了链接池,自能在协程中使用,所以单独写出来 * @author:dc * @time 2023/2/10 17:04 * Class Redis */ class Redis { use RedisQuery; /** * @var \Lib\Redis */ static $instance; /** * Redis constructor. */ public function __construct() { if(!$this->conn()){ $this->conn(); } } /** * @return \Redis * @author:dc * @time 2023/4/12 15:11 */ public function getClient(){ try { if(!$this->client->ping()){ $this->conn(); } }catch (\Throwable $e){ $this->conn(); } return $this->client; } /** * 链接 * @author:dc * @time 2023/4/12 15:10 */ private function conn(){ $this->client = new \Redis(); if($this->client->pconnect(REDIS_HOST,REDIS_PORT,2)){ // 密码 REDIS_PASSWORD && $this->client->auth(REDIS_PASSWORD); // 用库4 $this->client->select(REDIS_DB); return true; } return false; } /** * */ public function __destruct() { $this->close(); } /** * @return \Lib\Redis * @author:dc * @time 2023/2/13 9:38 */ public static function instance(){ if(empty(static::$instance)){ static::$instance = new \Lib\Redis(); } try { static::$instance->client->ping(); }catch (\Throwable $e){ static::$instance->close(); static::$instance = new \Lib\Redis(); } return static::$instance; } /** * 关闭 * @author:dc * @time 2023/3/16 13:42 */ public function close(){ // TODO: Implement __destruct() method. try { $this->client->ping(); $this->client->close(); }catch (\Throwable $e){ } $this->client = null; } }