#
luxiaotao1123
2025-02-12 2809275eb14deca48f62a28d7f1e604843d1b1da
rsf-common/src/main/java/com/vincent/rsf/common/utils/RedisSupport.java
@@ -1,6 +1,6 @@
package com.vincent.rsf.common.utils;
import lombok.extern.slf4j.Slf4j;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
@@ -11,26 +11,19 @@
import java.util.Set;
/**
 * 缓存支持
 * redis tools
 * Created by vincent on 2023-03-13
 */
@Slf4j
public class RedisSupport {
   private static final Map<String, RedisSupport> redis = new HashMap<>();
   private static final Map<String, RedisSupport> REDIS_CACHE = new HashMap<>();
   public static final String defaultRedisFlag = "redis";
   public static final String DEFAULT_FLAG = "redis";
   public static RedisSupport defaultRedisSupport = RedisSupport.getRedis(defaultRedisFlag);
   private static final String LINK = ".";
   public synchronized static RedisSupport getRedis(String name){
      RedisSupport redisSupport = redis.get(name);
      if(redisSupport!=null) {
         return redisSupport;
      }
      redisSupport = new RedisSupport(name);
      redis.put(name, redisSupport);
      return redisSupport;
   }
   public static RedisSupport defaultRedisSupport = RedisSupport.getRedis(DEFAULT_FLAG);
   protected JedisPool pool;
@@ -40,13 +33,21 @@
   public Boolean initialize = false;
   public synchronized static RedisSupport getRedis(String name){
      RedisSupport redisSupport = REDIS_CACHE.get(name);
      if (null == redisSupport){
         redisSupport = new RedisSupport(name);
         REDIS_CACHE.put(name, redisSupport);
      }
      return redisSupport;
   }
   private RedisSupport(String name) {
      try {
         boolean bAll = true;
         String[] configKeys={"host","port","max","min","timeout","index"};
         for(String key:configKeys){
            if(!ConfigHelper.contains(name+"."+key)){
               System.err.println();
               bAll = false;
            }
         }
@@ -63,390 +64,309 @@
              int port = ConfigHelper.getInteger(name+".port");
              int timeout = ConfigHelper.getInteger(name+".timeout");
              String password = ConfigHelper.getString(name+".password");
              JedisPool d ;
            pool = new JedisPool(config,host , port,timeout,password);
            //初始化
            Jedis jedis = this.getJedis();
            this.pool.returnResource(jedis);
            initialize = true;
         }else{
            System.err.println("ERROR - 初始化Reids时出错,在配置文件中未找到"+name+".***属性(host,port,max,min,timeout,index)");
            log.error("ERROR - 初始化Reids时出错,在配置文件中未找到{}.***属性(host,port,max,min,timeout,index)", name);
         }
      }catch(Exception ex){
         ex.printStackTrace();
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
   }
   public Jedis getJedis(){
      try{
         Jedis jedis = pool.getResource();
         if(this.index!=jedis.getDB().intValue())
         if(this.index != jedis.getDB().intValue()) {
            jedis.select(this.index);
         }
         return jedis;
      }catch(Exception ex){
         System.err.println(ex.getMessage());
      } catch (Exception e){
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
   }
   // key - value ----------------------------------------------------------------------------------------------------------
   public String setValue(String flag, String key, String value) {
      if(!this.initialize) {
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
         return jedis.set(flag + LINK + key, value);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
   }
   public void retJedis(Jedis jedis){
      if(jedis!=null)
         this.pool.returnResource(jedis);
   public String setValue(String flag, String key, String value,Integer seconds) {
      if(!this.initialize) {
         return null;
   }
   Date last_console_time = new Date();
   Boolean console = false;
   public void console(Object...objects){
      if(!this.initialize)return;
      if((new Date().getTime()-last_console_time.getTime())>(1000*30)){
         Jedis jedis = this.getJedis();
         try{
            console = "true".equals(jedis.get("INI.console"));
         }catch(Exception ex){
            System.err.println(ex.getMessage());
         }finally{
            if(jedis!=null)
               this.pool.returnResource(jedis);
         return jedis.setex(flag + LINK + key, seconds , value);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
         }
         last_console_time = new Date();
      return null;
      }
      if(!console)return;
      StringBuilder strConsole = new StringBuilder("REDIS -");
      for(Object object:objects) {
         strConsole.append(" ").append(object);
   public String getValue(String flag, String key) {
      if(!this.initialize) {
         return null;
      }
      System.out.println(strConsole);
      Jedis jedis = this.getJedis();
      try{
         return jedis.get(flag + LINK + key);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
   }
   public Long deleteValue(String flag, String... key) {
      if(!this.initialize) {
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
         String[] keys = new String[key.length];
         for(int i=0;i<key.length;i++){
            keys[i] = flag + LINK + key[i];
         }
         return jedis.del(keys);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
   }
   public Long clearValue(String flag) {
      if(!this.initialize) {
         return null;
      }
      this.setValue(flag, "CLEARING", "true");
      Jedis jedis = this.getJedis();
      try{
         Object returnValue = jedis.eval("return redis.call('del', unpack(redis.call('keys', ARGV[1])))",0,flag + LINK + "*");
         return Long.parseLong(String.valueOf(returnValue));
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
   }
   public void setValueExpire(String flag, String key,int seconds){
      if(!this.initialize) {
         return;
      }
      Jedis jedis = this.getJedis();
      try{
         jedis.expire((flag + LINK + key).getBytes(), seconds);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
   }
   public void setValueExpireTime(String flag, String key,Date atTime){
      if(!this.initialize) {
         return;
      }
      Jedis jedis = this.getJedis();
      try{
         jedis.expireAt((flag + LINK + key).getBytes(), atTime.getTime()/1000);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
   }
   // hash ----------------------------------------------------------------------------------------------------------
   public Object setMap(String name, String key, Object value) {
      if(!this.initialize)return null;
      console("set map value",name,key,value);
   public Long setMap(String name, String key, Object value) {
      if(!this.initialize) {
         return null;
      }
      if(value==null){
         deleteMap(name,key);
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
         jedis.hset(("MAP."+name).getBytes(),key.getBytes(), Serialize.serialize(value));
      }catch(Exception ex){
         //Utils.trace(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
         return jedis.hset(name.getBytes(), key.getBytes(), Serialize.serialize(value));
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return value;
      return null;
   }
   public <T> T getMap(String name, String key) {
      if(!this.initialize)return null;
      console("get map value",name,key);
      if(!this.initialize) {
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
         byte[] bytes = jedis.hget(("MAP."+name).getBytes(),key.getBytes());
         if(bytes==null||bytes.length==0)
         byte[] bytes = jedis.hget(name.getBytes(), key.getBytes());
         if (bytes == null || bytes.length == 0) {
            return null;
         }
         return (T) Serialize.unSerialize(bytes);
      }catch(Exception ex){
         //Utils.trace(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
   }
   public Set<String> getMapKeys(String name) {
      if(!this.initialize)return null;
      console("get map keys",name);
      if(!this.initialize) {
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
         Set<String> keys = jedis.hkeys(("MAP."+name));
         return keys;
      }catch(Exception ex){
         //Utils.trace(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
            return jedis.hkeys(name);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
   }
   public Long deleteMap(String name, String... key) {
      if(!this.initialize)return null;
      console("delete value",name,key);
      if(!this.initialize) {
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
         String[] keys=new String[key.length];
         for(int i=0;i<key.length;i++){
            keys[i]=key[i];
         }
         Long returnMap = jedis.hdel("MAP."+name, keys);
         return returnMap;
      }catch(Exception ex){
         //Utils.trace(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
            System.arraycopy(key, 0, keys, 0, key.length);
            return jedis.hdel(name, keys);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
   }
   public Long clearMap(String name) {
      if(!this.initialize)return null;
      console("clear value",name);
      if(!this.initialize) {
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
         return jedis.del("MAP."+name);
      }catch(Exception ex){
         //Utils.trace(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
         return jedis.del(name);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
   }
   public void setMapExpire(String name,int seconds){
      if(!this.initialize)return;
      if(!this.initialize) {
         return;
      }
      Jedis jedis = this.getJedis();
      try{
         jedis.expire(("MAP."+name).getBytes(), seconds);
      }catch(Exception ex){
         //Utils.trace(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
         jedis.expire(name.getBytes(), seconds);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
   }
   public void setMapExpireTime(String name,Date atTime){
      if(!this.initialize)return;
      if(!this.initialize) {
         return;
      }
      Jedis jedis = this.getJedis();
      try{
         jedis.expireAt(("MAP."+name).getBytes(), atTime.getTime()/1000);
      }catch(Exception ex){
         //Utils.trace(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
         jedis.expireAt(name.getBytes(), atTime.getTime()/1000);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
   }
   // mq ----------------------------------------------------------------------------------------------------------
   /**
    * 列表末尾添加元素
    * @param name
    * @param value
    * @return
    */
   public Object push(String name, Object value) {
      if(!this.initialize)return null;
      console("push list value",name,value);
   // 列表末尾添加元素
   public Long push(String name, Object value) {
      if(!this.initialize) {
         return null;
      }
      if(value==null){
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
         jedis.rpush(("LIST."+name).getBytes(),Serialize.serialize(value));
      }catch(Exception ex){
         //Utils.trace(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
         return jedis.rpush(name.getBytes(), Serialize.serialize(value));
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return value;
      return null;
   }
   /**
    * 获取列表头部元素
    * @param <T>
    * @param name
    * @return
    */
   // 获取列表头部元素 && 删除
   public <T> T pop(String name) {
      if(!this.initialize)return null;
      console("get list value",name);
      if(!this.initialize){
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
         byte[] bytes = jedis.lpop(("LIST."+name).getBytes());
         if(bytes==null||bytes.length==0)
         byte[] bytes = jedis.lpop(name.getBytes());
         if(bytes == null || bytes.length == 0) {
            return null;
         }
         return (T) Serialize.unSerialize(bytes);
      }catch(Exception ex){
         System.err.println(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
   }
   // 删除
   public Long deleteList(String name) {
      if(!this.initialize)return null;
      console("delete list",name);
      if(!this.initialize) {
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
         return jedis.del("LIST."+name);
      }catch(Exception ex){
         //Utils.trace(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
         return jedis.del(name);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
   }
   public void setListExpire(String name,int seconds){
      if(!this.initialize)return;
      if(!this.initialize) {
         return;
      }
      Jedis jedis = this.getJedis();
      try{
         jedis.expire(("LIST."+name).getBytes(), seconds);
      }catch(Exception ex){
         //Utils.trace(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
         jedis.expire(name.getBytes(), seconds);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
   }
   public void setListExpireTime(String name,Date atTime){
      if(!this.initialize)return;
      if(!this.initialize) {
         return;
      }
      Jedis jedis = this.getJedis();
      try{
         jedis.expireAt(("LIST."+name).getBytes(), atTime.getTime()/1000);
      }catch(Exception ex){
         //Utils.trace(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
      }
   }
   public String setValue(String flag, String key, String value) {
      if(!this.initialize)return null;
      console("set value",flag,key,value);
      Jedis jedis = this.getJedis();
      try{
         String result = jedis.set("KV."+flag+"."+key, value);
      }catch(Exception ex){
         //Utils.trace(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
      }
      return value;
   }
   public String setValue(String flag, String key, String value,Integer seconds) {
      if(!this.initialize)return null;
      console("set value",flag,key,value,seconds);
      Jedis jedis = this.getJedis();
      try{
         String result = jedis.setex("KV."+flag+"."+key,seconds,value);
      }catch(Exception ex){
         //Utils.trace(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
      }
      return value;
   }
   public String getValue(String flag, String key) {
      if(!this.initialize)return null;
      console("get value",flag,key);
      Jedis jedis = this.getJedis();
      try{
         String returnValue = jedis.get("KV."+flag+"."+key);
         return returnValue;
      }catch(Exception ex){
         //Utils.trace(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
      }
      return null;
   }
   public Long deleteValue(String flag, String... key) {
      if(!this.initialize)return null;
      console("delete value",flag,key);
      Jedis jedis = this.getJedis();
      try{
         String[] keys=new String[key.length];
         for(int i=0;i<key.length;i++){
            keys[i]="KV."+flag+"."+key[i];
         }
         Long returnValue = jedis.del(keys);
         return returnValue;
      }catch(Exception ex){
         //Utils.trace(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
      }
      return null;
   }
   public Long clearValue(String flag) {
      if(!this.initialize)return null;
      console("clear value",flag);
      this.setValue(flag, "CLEARING", "true");
      Jedis jedis = this.getJedis();
      try{
         //EVAL "return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 KV.*
         Object returnValue = jedis.eval("return redis.call('del', unpack(redis.call('keys', ARGV[1])))",0,"KV."+flag+"."+"*");
         return Long.parseLong(String.valueOf(returnValue));
      }catch(Exception ex){
         //Utils.trace(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
      }
      return null;
   }
   public void setValueExpire(String flag, String key,int seconds){
      if(!this.initialize)return;
      Jedis jedis = this.getJedis();
      try{
         jedis.expire(("KV."+flag+"."+key).getBytes(), seconds);
      }catch(Exception ex){
         //Utils.trace(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
      }
   }
   public void setValueExpireTime(String flag, String key,Date atTime){
      if(!this.initialize)return;
      Jedis jedis = this.getJedis();
      try{
         jedis.expireAt(("KV."+flag+"."+key).getBytes(), atTime.getTime()/1000);
      }catch(Exception ex){
         //Utils.trace(ex.getMessage());
      }finally{
         if(jedis!=null)
            this.pool.returnResource(jedis);
         jedis.expireAt(name.getBytes(), atTime.getTime()/1000);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
   }
@@ -462,7 +382,6 @@
   public Object setObject(String flag,String key, Object value) {
      if(!this.initialize)return null;
      console("set object",flag,key,value);
      if(value==null){
         this.deleteObject(flag, key);
@@ -482,7 +401,6 @@
   }
   public Object setObject(String flag,String key, Object value,Integer seconds) {
      if(!this.initialize)return null;
      console("set object",flag,key,value,seconds);
      if(value==null){
         this.deleteObject(flag, key);
@@ -502,8 +420,6 @@
   }
   public <T> T getObject(String flag,String key) {
      if(!this.initialize)return null;
      console("get object",flag,key);
      Jedis jedis = this.getJedis();
      try{
         byte[] bytes = jedis.get(("OBJ."+flag+"."+key).getBytes());
@@ -522,7 +438,6 @@
   public <T> Long deleteObject(String flag, String key) {
      if(!this.initialize)return null;
      console("delete object",flag,key);
      Jedis jedis = this.getJedis();
      try{
@@ -540,7 +455,6 @@
   public <T> Long clearObject(String flag) {
      if(!this.initialize)return null;
      console("clear object",flag);
      this.setObject(flag, "CLEARING", "true");
      Jedis jedis = this.getJedis();
@@ -594,7 +508,6 @@
   public String[] getKeys(String pattern) {
      if(!this.initialize)return null;
      console("keys",pattern);
      Jedis jedis = this.getJedis();
      try{