Bläddra i källkod

optimize redis client

java110 2 år sedan
förälder
incheckning
87b2e47a1e

+ 28 - 3
java110-core/src/main/java/com/java110/core/cache/JedisClientTemplate.java

@@ -8,6 +8,7 @@ import org.springframework.data.redis.core.RedisCallback;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.script.DefaultRedisScript;
 import org.springframework.data.redis.core.script.DefaultRedisScript;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
+import redis.clients.jedis.JedisCluster;
 import redis.clients.jedis.JedisPool;
 import redis.clients.jedis.JedisPool;
 
 
 import java.util.List;
 import java.util.List;
@@ -42,7 +43,17 @@ public class JedisClientTemplate implements Jedis {
         return redisTemplate.execute(new RedisCallback() {
         return redisTemplate.execute(new RedisCallback() {
             public String doInRedis(RedisConnection connection) {
             public String doInRedis(RedisConnection connection) {
                 redis.clients.jedis.Jedis jedis = (redis.clients.jedis.Jedis) connection.getNativeConnection();
                 redis.clients.jedis.Jedis jedis = (redis.clients.jedis.Jedis) connection.getNativeConnection();
-                return jedis.set(key, value, nxxx, expx, time);
+                Object nativeConnection = connection.getNativeConnection();
+                // 集群
+                if (nativeConnection instanceof JedisCluster) {
+                    return ((JedisCluster) nativeConnection).set(key, value, nxxx, expx, time);
+                }
+
+                // 单机
+                if (nativeConnection instanceof Jedis) {
+                    return ((Jedis) nativeConnection).set(key, value, nxxx, expx, time);
+                }
+                return "";
             }
             }
         }, true).toString();
         }, true).toString();
     }
     }
@@ -140,7 +151,21 @@ public class JedisClientTemplate implements Jedis {
 
 
     @Override
     @Override
     public Object eval(String script, List<String> keys, List<String> args) {
     public Object eval(String script, List<String> keys, List<String> args) {
-        DefaultRedisScript<Long> redisScript = new DefaultRedisScript(script,Long.class);
-        return redisTemplate.execute(redisScript, keys, args);
+        Object exeRet = redisTemplate.execute((RedisCallback<Object>) connection -> {
+            Object nativeConnection = connection.getNativeConnection();
+            // 集群
+            if (nativeConnection instanceof JedisCluster) {
+                return ((JedisCluster) nativeConnection).eval(script, keys, args);
+            }
+
+            // 单机
+            if (nativeConnection instanceof Jedis) {
+                return ((Jedis) nativeConnection).eval(script, keys, args);
+            }
+
+            return null;
+        });
+        //return redisTemplate.execute(redisScript, keys, args);
+        return exeRet;
     }
     }
 }
 }