#
luxiaotao1123
2025-02-12 2809275eb14deca48f62a28d7f1e604843d1b1da
#
2个文件已修改
619 ■■■■■ 已修改文件
rsf-common/src/main/java/com/vincent/rsf/common/utils/RedisSupport.java 609 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-common/src/main/java/com/vincent/rsf/common/utils/Serialize.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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,413 +33,340 @@
    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();
            for(String key : configKeys){
                if(!ConfigHelper.contains(name + "." + key)){
                    bAll = false;
                }
            }
            if(bAll){
            if (bAll) {
                config = new JedisPoolConfig();
                config.setMaxIdle(ConfigHelper.getInteger(name+".min"));
                config.setMaxWaitMillis(ConfigHelper.getLong(name+".timeout"));
                //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
                // 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
                config.setTestOnBorrow(false);
                //当前jedis连接的库号
                // 当前jedis连接的库号
                index = ConfigHelper.getInteger(name+".index");
                //实例化jedis池
                // 实例化jedis池
                String host = ConfigHelper.getString(name+".host");
                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)");
            } else {
                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;
    }
    public void retJedis(Jedis jedis){
        if(jedis!=null)
            this.pool.returnResource(jedis);
    }
    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);
            }
            last_console_time = new Date();
        }
        if(!console)return;
        StringBuilder strConsole = new StringBuilder("REDIS -");
        for(Object object:objects) {
            strConsole.append(" ").append(object);
        }
        System.out.println(strConsole);
    }
    public Object setMap(String name, String key, Object value) {
        if(!this.initialize)return null;
        console("set map value",name,key,value);
        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 value;
    }
    public <T> T getMap(String name, String key) {
        if(!this.initialize)return null;
        console("get map value",name,key);
        Jedis jedis = this.getJedis();
        try{
            byte[] bytes = jedis.hget(("MAP."+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);
        }
        return null;
    }
    public Set<String> getMapKeys(String name) {
        if(!this.initialize)return null;
        console("get map keys",name);
        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 null;
    }
    public Long deleteMap(String name, String... key) {
        if(!this.initialize)return null;
        console("delete value",name,key);
        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);
        }
        return null;
    }
    public Long clearMap(String name) {
        if(!this.initialize)return null;
        console("clear value",name);
        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 null;
    }
    public void setMapExpire(String name,int seconds){
        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);
        }
    }
    public void setMapExpireTime(String name,Date atTime){
        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);
        }
    }
    /**
     * 列表末尾添加元素
     * @param name
     * @param value
     * @return
     */
    public Object push(String name, Object value) {
        if(!this.initialize)return null;
        console("push list value",name,value);
        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 value;
    }
    /**
     * 获取列表头部元素
     * @param <T>
     * @param name
     * @return
     */
    public <T> T pop(String name) {
        if(!this.initialize)return null;
        console("get list value",name);
        Jedis jedis = this.getJedis();
        try{
            byte[] bytes = jedis.lpop(("LIST."+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);
        }
        return null;
    }
    public Long deleteList(String name) {
        if(!this.initialize)return null;
        console("delete list",name);
        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 null;
    }
    public void setListExpire(String name,int seconds){
        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);
        }
    }
    public void setListExpireTime(String name,Date atTime){
        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);
        }
    }
    // key - value ----------------------------------------------------------------------------------------------------------
    public String setValue(String flag, String key, String value) {
        if(!this.initialize)return null;
        console("set value",flag,key,value);
        if(!this.initialize) {
            return null;
        }
        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 jedis.set(flag + LINK + key, value);
        } catch (Exception e) {
            log.error(this.getClass().getSimpleName(), e);
        }
        return value;
        return null;
    }
    public String setValue(String flag, String key, String value,Integer seconds) {
        if(!this.initialize)return null;
        console("set value",flag,key,value,seconds);
        if(!this.initialize) {
            return null;
        }
        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 jedis.setex(flag + LINK + key, seconds , value);
        } catch (Exception e) {
            log.error(this.getClass().getSimpleName(), e);
        }
        return value;
        return null;
    }
    public String getValue(String flag, String key) {
        if(!this.initialize)return null;
        console("get value",flag,key);
        if(!this.initialize) {
            return null;
        }
        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 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;
        console("delete value",flag,key);
        if(!this.initialize) {
            return null;
        }
        Jedis jedis = this.getJedis();
        try{
            String[] keys=new String[key.length];
            String[] keys = new String[key.length];
            for(int i=0;i<key.length;i++){
                keys[i]="KV."+flag+"."+key[i];
                keys[i] = flag + LINK + 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 jedis.del(keys);
        } catch (Exception e) {
            log.error(this.getClass().getSimpleName(), e);
        }
        return null;
    }
    public Long clearValue(String flag) {
        if(!this.initialize)return null;
        console("clear value",flag);
        if(!this.initialize) {
            return null;
        }
        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+"."+"*");
            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 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 void setValueExpire(String flag, String key,int seconds){
        if(!this.initialize)return;
        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);
            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);
        }
    }
    public void setValueExpireTime(String flag, String key,Date atTime){
        if(!this.initialize)return;
    // hash ----------------------------------------------------------------------------------------------------------
    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 {
            return jedis.hset(name.getBytes(), key.getBytes(), Serialize.serialize(value));
        } catch (Exception e) {
            log.error(this.getClass().getSimpleName(), e);
        }
        return null;
    }
    public <T> T getMap(String name, String key) {
        if(!this.initialize) {
            return null;
        }
        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);
            byte[] bytes = jedis.hget(name.getBytes(), key.getBytes());
            if (bytes == null || bytes.length == 0) {
                return null;
            }
            return (T) Serialize.unSerialize(bytes);
        } catch (Exception e) {
            log.error(this.getClass().getSimpleName(), e);
        }
        return null;
    }
    public Set<String> getMapKeys(String name) {
        if(!this.initialize) {
            return null;
        }
        Jedis jedis = this.getJedis();
        try{
            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;
        }
        Jedis jedis = this.getJedis();
        try{
            String[] keys = new String[key.length];
            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;
        }
        Jedis jedis = this.getJedis();
        try{
            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;
        }
        Jedis jedis = this.getJedis();
        try{
            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;
        }
        Jedis jedis = this.getJedis();
        try{
            jedis.expireAt(name.getBytes(), atTime.getTime()/1000);
        } catch (Exception e) {
            log.error(this.getClass().getSimpleName(), e);
        }
    }
    // mq ----------------------------------------------------------------------------------------------------------
    // 列表末尾添加元素
    public Long push(String name, Object value) {
        if(!this.initialize) {
            return null;
        }
        if(value == null){
            return null;
        }
        Jedis jedis = this.getJedis();
        try{
            return jedis.rpush(name.getBytes(), Serialize.serialize(value));
        } catch (Exception e) {
            log.error(this.getClass().getSimpleName(), e);
        }
        return null;
    }
    // 获取列表头部元素 && 删除
    public <T> T pop(String name) {
        if(!this.initialize){
            return null;
        }
        Jedis jedis = this.getJedis();
        try{
            byte[] bytes = jedis.lpop(name.getBytes());
            if(bytes == null || bytes.length == 0) {
                return null;
            }
            return (T) Serialize.unSerialize(bytes);
        } catch (Exception e) {
            log.error(this.getClass().getSimpleName(), e);
        }
        return null;
    }
    // 删除
    public Long deleteList(String name) {
        if(!this.initialize) {
            return null;
        }
        Jedis jedis = this.getJedis();
        try{
            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;
        }
        Jedis jedis = this.getJedis();
        try{
            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;
        }
        Jedis jedis = this.getJedis();
        try{
            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{
rsf-common/src/main/java/com/vincent/rsf/common/utils/Serialize.java
@@ -1,10 +1,12 @@
package com.vincent.rsf.common.utils;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
@Slf4j
public class Serialize {
    // 序列化
    public static byte[] serialize(Object object) {
        ObjectOutputStream oos = null;
        ByteArrayOutputStream baos = null;
@@ -14,12 +16,11 @@
            oos.writeObject(object);
            return baos.toByteArray();
        } catch (Exception e) {
            e.printStackTrace();
            log.error("Serialize.serialize", e);
        }
        return null;
    }
    // 反序列化
    public static Object unSerialize(byte[] bytes) {
        ByteArrayInputStream bais = null;
        try {
@@ -34,10 +35,9 @@
            };
            return ois.readObject();
        } catch (Exception e) {
            e.printStackTrace();
            log.error("Serialize.unSerialize", e);
        }
        return null;
    }
}