| 
...
 | 
...
 | 
@@ -23,6 +23,15 @@ class RedisPool { | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     public function __construct()
 | 
| 
 | 
 | 
     {
 | 
| 
 | 
 | 
         $this->conn();
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     /**
 | 
| 
 | 
 | 
      * 链接
 | 
| 
 | 
 | 
      * @author:dc
 | 
| 
 | 
 | 
      * @time 2023/4/12 15:10
 | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     private function conn(){
 | 
| 
 | 
 | 
         $this->client = new \Redis();
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         $this->client->connect(REDIS_HOST,REDIS_PORT,1);
 | 
| 
...
 | 
...
 | 
@@ -30,7 +39,6 @@ class RedisPool { | 
| 
 | 
 | 
         REDIS_PASSWORD && $this->client->auth(REDIS_PASSWORD);
 | 
| 
 | 
 | 
         // 用库4
 | 
| 
 | 
 | 
         $this->client->select(REDIS_DB);
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
...
 | 
...
 | 
@@ -43,7 +51,7 @@ class RedisPool { | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     public function has($key)
 | 
| 
 | 
 | 
     {
 | 
| 
 | 
 | 
         return $this->client->exists($key);
 | 
| 
 | 
 | 
         return $this->getClient()->exists($key);
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
...
 | 
...
 | 
@@ -56,7 +64,7 @@ class RedisPool { | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     public function get($key, $default=null)
 | 
| 
 | 
 | 
     {
 | 
| 
 | 
 | 
         $data = $this->client->get($key);
 | 
| 
 | 
 | 
         $data = $this->getClient()->get($key);
 | 
| 
 | 
 | 
         if($data === null){
 | 
| 
 | 
 | 
             return $default;
 | 
| 
 | 
 | 
         }
 | 
| 
...
 | 
...
 | 
@@ -72,7 +80,7 @@ class RedisPool { | 
| 
 | 
 | 
      * @time 2023/2/10 18:02
 | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     public function set($key,$val,$ttl=null) {
 | 
| 
 | 
 | 
         return $this->client->set($key,$this->serialize($val),$ttl);
 | 
| 
 | 
 | 
         return $this->getClient()->set($key,$this->serialize($val),$ttl);
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
...
 | 
...
 | 
@@ -86,7 +94,7 @@ class RedisPool { | 
| 
 | 
 | 
      * @time 2023/2/10 17:53
 | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     public function add($key,$val,$ttl=null):mixed {
 | 
| 
 | 
 | 
         return $this->client->eval(
 | 
| 
 | 
 | 
         return $this->getClient()->eval(
 | 
| 
 | 
 | 
             "return redis.call('exists',KEYS[1])<1 and redis.call('setex',KEYS[1],ARGV[2],ARGV[1])",
 | 
| 
 | 
 | 
             [$key, $this->serialize($val), $ttl],
 | 
| 
 | 
 | 
             1
 | 
| 
...
 | 
...
 | 
@@ -101,7 +109,7 @@ class RedisPool { | 
| 
 | 
 | 
      * @time 2023/2/13 9:07
 | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     public function lPush($key,$value){
 | 
| 
 | 
 | 
         return $this->client->lPush($key,$this->serialize($value));
 | 
| 
 | 
 | 
         return $this->getClient()->lPush($key,$this->serialize($value));
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     /**
 | 
| 
...
 | 
...
 | 
@@ -112,7 +120,7 @@ class RedisPool { | 
| 
 | 
 | 
      * @time 2023/2/13 9:07
 | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     public function rPush($key,$value){
 | 
| 
 | 
 | 
         return $this->client->rPush($key,$this->serialize($value));
 | 
| 
 | 
 | 
         return $this->getClient()->rPush($key,$this->serialize($value));
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     /**
 | 
| 
...
 | 
...
 | 
@@ -122,7 +130,7 @@ class RedisPool { | 
| 
 | 
 | 
      * @time 2023/2/13 9:08
 | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     public function lPop($key){
 | 
| 
 | 
 | 
         return $this->unserialize($this->client->lPop($key));
 | 
| 
 | 
 | 
         return $this->unserialize($this->getClient()->lPop($key));
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     /**
 | 
| 
...
 | 
...
 | 
@@ -132,7 +140,7 @@ class RedisPool { | 
| 
 | 
 | 
      * @time 2023/2/13 9:09
 | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     public function rPop($key){
 | 
| 
 | 
 | 
         return $this->unserialize($this->client->rPop($key));
 | 
| 
 | 
 | 
         return $this->unserialize($this->getClient()->rPop($key));
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     /**
 | 
| 
...
 | 
...
 | 
@@ -145,13 +153,13 @@ class RedisPool { | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     public function incr($key, $ttl = null){
 | 
| 
 | 
 | 
         if($ttl){
 | 
| 
 | 
 | 
             return $this->client->eval(
 | 
| 
 | 
 | 
             return $this->getClient()->eval(
 | 
| 
 | 
 | 
                 "local x = redis.call('incr',KEYS[1]);redis.call('expire',KEYS[1],ARGV[1]);return x",
 | 
| 
 | 
 | 
                 [$key, $ttl],
 | 
| 
 | 
 | 
                 1
 | 
| 
 | 
 | 
             );
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
         return $this->client->incr($key);
 | 
| 
 | 
 | 
         return $this->getClient()->incr($key);
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     /**
 | 
| 
...
 | 
...
 | 
@@ -164,13 +172,13 @@ class RedisPool { | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     public function decr($key,$ttl = null){
 | 
| 
 | 
 | 
         if($ttl){
 | 
| 
 | 
 | 
             return $this->client->eval(
 | 
| 
 | 
 | 
             return $this->getClient()->eval(
 | 
| 
 | 
 | 
                 "local x = redis.call('decr',KEYS[1]);redis.call('expire',KEYS[1],ARGV[1]);return x",
 | 
| 
 | 
 | 
                 [$key, $ttl],
 | 
| 
 | 
 | 
                 1
 | 
| 
 | 
 | 
             );
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
         return $this->client->decr($key);
 | 
| 
 | 
 | 
         return $this->getClient()->decr($key);
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
...
 | 
...
 | 
@@ -182,7 +190,7 @@ class RedisPool { | 
| 
 | 
 | 
      * @time 2023/2/14 14:04
 | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     public function delete($key):int {
 | 
| 
 | 
 | 
         return $this->client->del($key);
 | 
| 
 | 
 | 
         return $this->getClient()->del($key);
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     /**
 | 
| 
...
 | 
...
 | 
@@ -193,7 +201,7 @@ class RedisPool { | 
| 
 | 
 | 
      * @time 2023/3/16 11:36
 | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     public function getDel($key){
 | 
| 
 | 
 | 
         return $this->client->eval(
 | 
| 
 | 
 | 
         return $this->getClient()->eval(
 | 
| 
 | 
 | 
             "local x = redis.call('get',KEYS[1]);if x then redis.call('del',KEYS[1]) end return x",
 | 
| 
 | 
 | 
             [$key],
 | 
| 
 | 
 | 
             1
 | 
| 
...
 | 
...
 | 
@@ -221,6 +229,19 @@ class RedisPool { | 
| 
 | 
 | 
         return $val ? unserialize($val) : '';
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     /**
 | 
| 
 | 
 | 
      * @return \Redis
 | 
| 
 | 
 | 
      * @author:dc
 | 
| 
 | 
 | 
      * @time 2023/4/12 15:11
 | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     public function getClient(){
 | 
| 
 | 
 | 
         try {
 | 
| 
 | 
 | 
             $this->client->ping();
 | 
| 
 | 
 | 
         }catch (\RedisException $e){
 | 
| 
 | 
 | 
             $this->conn();
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
         return $this->client;
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
...
 | 
...
 | 
@@ -240,12 +261,6 @@ class RedisPool { | 
| 
 | 
 | 
         if(empty(static::$instance[$cid])){
 | 
| 
 | 
 | 
             static::$instance[$cid] = new \Lib\RedisPool();
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
         // ping失败了说明连接炸了
 | 
| 
 | 
 | 
         try {
 | 
| 
 | 
 | 
             static::$instance[$cid]->client->ping();
 | 
| 
 | 
 | 
         }catch (\RedisException $e){
 | 
| 
 | 
 | 
             static::$instance[$cid] = new \Lib\RedisPool();
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         return static::$instance[$cid];
 | 
| 
 | 
 | 
     }
 | 
| 
...
 | 
...
 | 
@@ -259,9 +274,8 @@ class RedisPool { | 
| 
 | 
 | 
     public function close(){
 | 
| 
 | 
 | 
         // TODO: Implement __destruct() method.
 | 
| 
 | 
 | 
         try {
 | 
| 
 | 
 | 
             if($this->client->ping()){
 | 
| 
 | 
 | 
                 $this->client->close();
 | 
| 
 | 
 | 
             }
 | 
| 
 | 
 | 
             $this->client->ping();
 | 
| 
 | 
 | 
             $this->client->close();
 | 
| 
 | 
 | 
         }catch (\RedisException $e){}
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         $this->client = null;
 | 
...
 | 
...
 | 
 |