zhou zhou
17 小时以前 1194038279d8a378f2ce7cbea59a32d753becbf8
rsf-server/src/main/java/com/vincent/rsf/server/common/service/RedisService.java
@@ -11,6 +11,8 @@
import java.util.Date;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Function;
/**
 * redis tools
@@ -60,6 +62,31 @@
      return null;
   }
   private <T> T withJedis(Function<Jedis, T> action) {
      Jedis jedis = this.getJedis();
      if (jedis == null) {
         return null;
      }
      try (jedis) {
         return action.apply(jedis);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
   }
   private void withJedisVoid(Consumer<Jedis> action) {
      Jedis jedis = this.getJedis();
      if (jedis == null) {
         return;
      }
      try (jedis) {
         action.accept(jedis);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
   }
   // key - object ----------------------------------------------------------------------------------------------------------
   public String set(String flag, String key, Object value) {
@@ -70,13 +97,7 @@
         this.delete(flag, key);
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
         return jedis.set((flag + LINK + key).getBytes(), Serialize.serialize(value));
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
      return withJedis(jedis -> jedis.set((flag + LINK + key).getBytes(), Serialize.serialize(value)));
   }
   public String set(String flag, String key, Object value, Integer seconds) {
@@ -87,58 +108,38 @@
         this.delete(flag, key);
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
         return jedis.setex((flag + LINK + key).getBytes(), seconds, Serialize.serialize(value));
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
      return withJedis(jedis -> jedis.setex((flag + LINK + key).getBytes(), seconds, Serialize.serialize(value)));
   }
   public <T> T get(String flag, String key) {
      if(!this.initialize) {
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
      return withJedis(jedis -> {
         byte[] bytes = jedis.get((flag + LINK + 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 Long delete(String flag, String key) {
      if(!this.initialize) {
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
         return jedis.del((flag + LINK + key).getBytes());
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
      return withJedis(jedis -> jedis.del((flag + LINK + key).getBytes()));
   }
   public Long clear(String flag) {
      if(!this.initialize) {
         return null;
      }
      Jedis jedis = this.getJedis();
      this.setValue(flag, "CLEARING", "true");
      try{
      return withJedis(jedis -> {
         Object returnValue = jedis.eval("local keys = redis.call('keys', ARGV[1]) for i=1,#keys,1000 do redis.call('del', unpack(keys, i, math.min(i+4999, #keys))) end return #keys",0,flag + LINK + "*");
         return Long.parseLong(String.valueOf(returnValue));
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
      });
   }
   // 为已存在的key设置过期时间 - 秒
@@ -146,12 +147,9 @@
      if(!this.initialize) {
         return;
      }
      Jedis jedis = this.getJedis();
      try{
      withJedisVoid(jedis -> {
         jedis.expire((flag + LINK + key).getBytes(), seconds);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      });
   }
   // 为已存在的key设置过期时间 - 具体到时间戳 (秒)
@@ -159,12 +157,9 @@
      if(!this.initialize) {
         return;
      }
      Jedis jedis = this.getJedis();
      try{
      withJedisVoid(jedis -> {
         jedis.expireAt((flag + LINK + key).getBytes(), toTime.getTime()/1000);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      });
   }
   // 获取过期剩余时间(秒) ttl == -1 没有设置过期时间; ttl == -2 key不存在
@@ -172,13 +167,7 @@
      if(!this.initialize) {
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
         return jedis.ttl((flag + LINK + key).getBytes());
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
      return withJedis(jedis -> jedis.ttl((flag + LINK + key).getBytes()));
   }
@@ -188,39 +177,21 @@
      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;
      return withJedis(jedis -> jedis.set(flag + LINK + key, value));
   }
   public String setValue(String flag, String key, String value, Integer seconds) {
      if(!this.initialize) {
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
         return jedis.setex(flag + LINK + key, seconds , value);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
      return withJedis(jedis -> jedis.setex(flag + LINK + key, seconds , value));
   }
   public String getValue(String flag, String key) {
      if(!this.initialize) {
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
         return jedis.get(flag + LINK + key);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
      return withJedis(jedis -> jedis.get(flag + LINK + key));
   }
   public Long deleteValue(String flag, String... key) {
@@ -228,17 +199,13 @@
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
      return withJedis(jedis -> {
         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) {
@@ -247,39 +214,28 @@
      }
      this.setValue(flag, "CLEARING", "true");
      Jedis jedis = this.getJedis();
      try{
      return withJedis(jedis -> {
         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{
      withJedisVoid(jedis -> {
         jedis.expire((flag + LINK + key).getBytes(), seconds);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      });
   }
   public void setValueExpireAt(String flag, String key,Date atTime){
      if(!this.initialize) {
         return;
      }
      Jedis jedis = this.getJedis();
      try{
      withJedisVoid(jedis -> {
         jedis.expireAt((flag + LINK + key).getBytes(), atTime.getTime()/1000);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      });
   }
@@ -293,95 +249,63 @@
         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;
      return withJedis(jedis -> jedis.hset(name.getBytes(), key.getBytes(), Serialize.serialize(value)));
   }
   public <T> T getMap(String name, String key) {
      if(!this.initialize) {
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
      return withJedis(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;
      return withJedis(jedis -> jedis.hkeys(name));
   }
   public Long deleteMap(String name, String... key) {
      if(!this.initialize) {
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
      return withJedis(jedis -> {
         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;
      return withJedis(jedis -> jedis.del(name));
   }
   public void setMapExpire(String name,int seconds){
      if(!this.initialize) {
         return;
      }
      Jedis jedis = this.getJedis();
      try{
      withJedisVoid(jedis -> {
         jedis.expire(name.getBytes(), seconds);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      });
   }
   public void setMapExpireAt(String name,Date atTime){
      if(!this.initialize) {
         return;
      }
      Jedis jedis = this.getJedis();
      try{
      withJedisVoid(jedis -> {
         jedis.expireAt(name.getBytes(), atTime.getTime()/1000);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      });
   }
@@ -395,13 +319,7 @@
      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;
      return withJedis(jedis -> jedis.rpush(name.getBytes(), Serialize.serialize(value)));
   }
   // 获取列表头部元素 && 删除
@@ -409,17 +327,13 @@
      if(!this.initialize){
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
      return withJedis(jedis -> {
         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;
      });
   }
   // 删除
@@ -427,37 +341,25 @@
      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;
      return withJedis(jedis -> jedis.del(name));
   }
   public void setListExpire(String name, int seconds){
      if(!this.initialize) {
         return;
      }
      Jedis jedis = this.getJedis();
      try{
      withJedisVoid(jedis -> {
         jedis.expire(name.getBytes(), seconds);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      });
   }
   public void setListExpireAt(String name, Date atTime){
      if(!this.initialize) {
         return;
      }
      Jedis jedis = this.getJedis();
      try{
      withJedisVoid(jedis -> {
         jedis.expireAt(name.getBytes(), atTime.getTime()/1000);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      });
   }
   // count ----------------------------------------------------------------------------------------------------------
@@ -466,26 +368,14 @@
      if(!this.initialize) {
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
            return jedis.incr("COUNT." + key);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
      return withJedis(jedis -> jedis.incr("COUNT." + key));
   }
   public Long decr(String key) {
      if(!this.initialize) {
         return null;
      }
      Jedis jedis = this.getJedis();
      try{
            return jedis.decr("COUNT." + key);
      } catch (Exception e) {
         log.error(this.getClass().getSimpleName(), e);
      }
      return null;
      return withJedis(jedis -> jedis.decr("COUNT." + key));
   }
}