|
|
|
@ -1,10 +1,5 @@
|
|
|
|
|
package com.fr.third.redis.clients.jedis; |
|
|
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Locale; |
|
|
|
|
|
|
|
|
|
import com.fr.third.redis.clients.jedis.commands.ProtocolCommand; |
|
|
|
|
import com.fr.third.redis.clients.jedis.exceptions.JedisAskDataException; |
|
|
|
|
import com.fr.third.redis.clients.jedis.exceptions.JedisBusyException; |
|
|
|
@ -17,6 +12,13 @@ import com.fr.third.redis.clients.jedis.util.RedisInputStream;
|
|
|
|
|
import com.fr.third.redis.clients.jedis.util.RedisOutputStream; |
|
|
|
|
import com.fr.third.redis.clients.jedis.util.SafeEncoder; |
|
|
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.HashMap; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Locale; |
|
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
|
|
public final class Protocol { |
|
|
|
|
|
|
|
|
|
private static final String ASK_RESPONSE = "ASK"; |
|
|
|
@ -79,13 +81,44 @@ public final class Protocol {
|
|
|
|
|
public static final byte[] POSITIVE_INFINITY_BYTES = "+inf".getBytes(); |
|
|
|
|
public static final byte[] NEGATIVE_INFINITY_BYTES = "-inf".getBytes(); |
|
|
|
|
|
|
|
|
|
public static Map<ProtocolCommand, ProtocolCommand> commandMapping = new HashMap<ProtocolCommand, ProtocolCommand>(); |
|
|
|
|
|
|
|
|
|
public static volatile int commandMappingSize = 0; |
|
|
|
|
|
|
|
|
|
public static synchronized void initCommandMapping(Map<String, String> mapping) { |
|
|
|
|
|
|
|
|
|
commandMapping.clear(); |
|
|
|
|
for (Map.Entry<String, String> entry : mapping.entrySet()) { |
|
|
|
|
ProtocolCommand defaultCommand = Command.fromName(entry.getKey()); |
|
|
|
|
if (defaultCommand != null) { |
|
|
|
|
commandMapping.put(defaultCommand, new ProtocolCommand() { |
|
|
|
|
@Override |
|
|
|
|
public byte[] getRaw() { |
|
|
|
|
return SafeEncoder.encode(entry.getValue()); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
commandMappingSize = commandMapping.size(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Protocol() { |
|
|
|
|
// this prevent the class from instantiation
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static void sendCommand(final RedisOutputStream os, final ProtocolCommand command, |
|
|
|
|
final byte[]... args) { |
|
|
|
|
sendCommand(os, command.getRaw(), args); |
|
|
|
|
ProtocolCommand realCommand = getRealCommand(command); |
|
|
|
|
sendCommand(os, realCommand.getRaw(), args); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static ProtocolCommand getRealCommand(ProtocolCommand command) { |
|
|
|
|
if (commandMappingSize > 0 && commandMapping.containsKey(command)) { |
|
|
|
|
return commandMapping.get(command); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return command; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void sendCommand(final RedisOutputStream os, final byte[] command, |
|
|
|
@ -242,20 +275,20 @@ public final class Protocol {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static enum Command implements ProtocolCommand { |
|
|
|
|
PING, SET, GET, QUIT, EXISTS, DEL, UNLINK, TYPE, FLUSHDB, KEYS, RANDOMKEY, RENAME, RENAMENX, RENAMEX, |
|
|
|
|
DBSIZE, EXPIRE, EXPIREAT, TTL, SELECT, MOVE, FLUSHALL, GETSET, MGET, SETNX, SETEX, MSET, MSETNX, |
|
|
|
|
DECRBY, DECR, INCRBY, INCR, APPEND, SUBSTR, HSET, HGET, HSETNX, HMSET, HMGET, HINCRBY, HEXISTS, |
|
|
|
|
HDEL, HLEN, HKEYS, HVALS, HGETALL, RPUSH, LPUSH, LLEN, LRANGE, LTRIM, LINDEX, LSET, LREM, LPOP, RPOP, |
|
|
|
|
RPOPLPUSH, SADD, SMEMBERS, SREM, SPOP, SMOVE, SCARD, SISMEMBER, SINTER, SINTERSTORE, SUNION, |
|
|
|
|
SUNIONSTORE, SDIFF, SDIFFSTORE, SRANDMEMBER, ZADD, ZRANGE, ZREM, ZINCRBY, ZRANK, ZREVRANK, |
|
|
|
|
ZREVRANGE, ZCARD, ZSCORE, MULTI, DISCARD, EXEC, WATCH, UNWATCH, SORT, BLPOP, BRPOP, AUTH, |
|
|
|
|
SUBSCRIBE, PUBLISH, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBSUB, ZCOUNT, ZRANGEBYSCORE, |
|
|
|
|
ZREVRANGEBYSCORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZUNIONSTORE, ZINTERSTORE, ZLEXCOUNT, |
|
|
|
|
ZRANGEBYLEX, ZREVRANGEBYLEX, ZREMRANGEBYLEX, SAVE, BGSAVE, BGREWRITEAOF, LASTSAVE, SHUTDOWN, |
|
|
|
|
INFO, MONITOR, SLAVEOF, CONFIG, STRLEN, SYNC, LPUSHX, PERSIST, RPUSHX, ECHO, LINSERT, DEBUG, BRPOPLPUSH, |
|
|
|
|
SETBIT, GETBIT, BITPOS, SETRANGE, GETRANGE, EVAL, EVALSHA, SCRIPT, SLOWLOG, OBJECT, BITCOUNT, BITOP, |
|
|
|
|
SENTINEL, DUMP, RESTORE, PEXPIRE, PEXPIREAT, PTTL, INCRBYFLOAT, PSETEX, CLIENT, TIME, MIGRATE, HINCRBYFLOAT, |
|
|
|
|
SCAN, HSCAN, SSCAN, ZSCAN, WAIT, CLUSTER, ASKING, PFADD, PFCOUNT, PFMERGE, READONLY, GEOADD, GEODIST, |
|
|
|
|
PING, SET, GET, QUIT, EXISTS, DEL, UNLINK, TYPE, FLUSHDB, KEYS, RANDOMKEY, RENAME, RENAMENX, RENAMEX, |
|
|
|
|
DBSIZE, EXPIRE, EXPIREAT, TTL, SELECT, MOVE, FLUSHALL, GETSET, MGET, SETNX, SETEX, MSET, MSETNX, |
|
|
|
|
DECRBY, DECR, INCRBY, INCR, APPEND, SUBSTR, HSET, HGET, HSETNX, HMSET, HMGET, HINCRBY, HEXISTS, |
|
|
|
|
HDEL, HLEN, HKEYS, HVALS, HGETALL, RPUSH, LPUSH, LLEN, LRANGE, LTRIM, LINDEX, LSET, LREM, LPOP, RPOP, |
|
|
|
|
RPOPLPUSH, SADD, SMEMBERS, SREM, SPOP, SMOVE, SCARD, SISMEMBER, SINTER, SINTERSTORE, SUNION, |
|
|
|
|
SUNIONSTORE, SDIFF, SDIFFSTORE, SRANDMEMBER, ZADD, ZRANGE, ZREM, ZINCRBY, ZRANK, ZREVRANK, |
|
|
|
|
ZREVRANGE, ZCARD, ZSCORE, MULTI, DISCARD, EXEC, WATCH, UNWATCH, SORT, BLPOP, BRPOP, AUTH, |
|
|
|
|
SUBSCRIBE, PUBLISH, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBSUB, ZCOUNT, ZRANGEBYSCORE, |
|
|
|
|
ZREVRANGEBYSCORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZUNIONSTORE, ZINTERSTORE, ZLEXCOUNT, |
|
|
|
|
ZRANGEBYLEX, ZREVRANGEBYLEX, ZREMRANGEBYLEX, SAVE, BGSAVE, BGREWRITEAOF, LASTSAVE, SHUTDOWN, |
|
|
|
|
INFO, MONITOR, SLAVEOF, CONFIG, STRLEN, SYNC, LPUSHX, PERSIST, RPUSHX, ECHO, LINSERT, DEBUG, BRPOPLPUSH, |
|
|
|
|
SETBIT, GETBIT, BITPOS, SETRANGE, GETRANGE, EVAL, EVALSHA, SCRIPT, SLOWLOG, OBJECT, BITCOUNT, BITOP, |
|
|
|
|
SENTINEL, DUMP, RESTORE, PEXPIRE, PEXPIREAT, PTTL, INCRBYFLOAT, PSETEX, CLIENT, TIME, MIGRATE, HINCRBYFLOAT, |
|
|
|
|
SCAN, HSCAN, SSCAN, ZSCAN, WAIT, CLUSTER, ASKING, PFADD, PFCOUNT, PFMERGE, READONLY, GEOADD, GEODIST, |
|
|
|
|
GEOHASH, GEOPOS, GEORADIUS, GEORADIUSBYMEMBER, MODULE, BITFIELD, HSTRLEN, TOUCH, SWAPDB; |
|
|
|
|
|
|
|
|
|
private final byte[] raw; |
|
|
|
@ -268,6 +301,17 @@ public final class Protocol {
|
|
|
|
|
public byte[] getRaw() { |
|
|
|
|
return raw; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static ProtocolCommand fromName(String commandName) { |
|
|
|
|
Command[] commands = values(); |
|
|
|
|
for (Command command : commands) { |
|
|
|
|
if (command.name().equals(commandName)) { |
|
|
|
|
return command; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static enum Keyword { |
|
|
|
|