序
本文次要钻研一下RedisToken
RedisToken
resp-server-0.16.0/src/main/java/com/github/tonivade/resp/protocol/RedisToken.java
public interface RedisToken { RedisToken NULL_STRING = string((SafeString) null); RedisToken RESPONSE_OK = status("OK"); RedisTokenType getType(); <T> T accept(RedisTokenVisitor<T> visitor); static RedisToken nullString() { return NULL_STRING; } static RedisToken responseOk() { return RESPONSE_OK; } static RedisToken string(SafeString str) { return new StringRedisToken(str); } static RedisToken string(String str) { return new StringRedisToken(safeString(str)); } static RedisToken status(String str) { return new StatusRedisToken(str); } static RedisToken integer(boolean b) { return new IntegerRedisToken(b ? 1 : 0); } static RedisToken integer(int i) { return new IntegerRedisToken(i); } static RedisToken error(String str) { return new ErrorRedisToken(str); } static RedisToken array(RedisToken... redisTokens) { return new ArrayRedisToken(ImmutableList.of(redisTokens)); } static RedisToken array(Collection<RedisToken> redisTokens) { return new ArrayRedisToken(ImmutableList.from(redisTokens)); } static RedisToken array(Sequence<RedisToken> redisTokens) { return new ArrayRedisToken(redisTokens.asArray()); } static <T> Stream<T> visit(Stream<RedisToken> tokens, RedisTokenVisitor<T> visitor) { return tokens.map(token -> token.accept(visitor)); }}
- RedisToken接口定义了getType、accept办法;它还提供了nullString、responseOk、string、status、integer、error、array、visit静态方法
AbstractRedisToken
resp-server-0.16.0/src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
public abstract class AbstractRedisToken<T> implements RedisToken { private static final String SEPARATOR = "=>"; private static final Equal<AbstractRedisToken<?>> EQUAL = Equal.<AbstractRedisToken<?>>of() .comparing(AbstractRedisToken::getType) .comparing(AbstractRedisToken::getValue); private final RedisTokenType type; private final T value; private AbstractRedisToken(RedisTokenType type, T value) { this.type = requireNonNull(type); this.value = value; } @Override public RedisTokenType getType() { return type; } public T getValue() { return value; } @Override public int hashCode() { return Objects.hash(type, value); } @Override public boolean equals(Object obj) { return EQUAL.applyTo(this, obj); } @Override public String toString() { return type + SEPARATOR + value; }}
- AbstractRedisToken申明实现RedisToken接口,它的结构器要求输出type、value
UnknownRedisToken
resp-server-0.16.0/src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
public static final class UnknownRedisToken extends AbstractRedisToken<SafeString> { UnknownRedisToken(SafeString value) { super(RedisTokenType.UNKNOWN, value); } @Override public <T> T accept(RedisTokenVisitor<T> visitor) { return visitor.unknown(this); } }
- UnknownRedisToken继承了AbstractRedisToken,其value为SafeString类型,其type为RedisTokenType.UNKNOWN,其accept执行的是visitor.unknown(this)
StringRedisToken
resp-server-0.16.0/src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
public static final class StringRedisToken extends AbstractRedisToken<SafeString> { StringRedisToken(SafeString value) { super(RedisTokenType.STRING, value); } @Override public <T> T accept(RedisTokenVisitor<T> visitor) { return visitor.string(this); } }
- StringRedisToken继承了AbstractRedisToken,其value为SafeString,其type为RedisTokenType.STRING,其accept执行的是visitor.string(this)
StatusRedisToken
resp-server-0.16.0/src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
public static final class StatusRedisToken extends AbstractRedisToken<String> { StatusRedisToken(String value) { super(RedisTokenType.STATUS, value); } @Override public <T> T accept(RedisTokenVisitor<T> visitor) { return visitor.status(this); } }
- StatusRedisToken继承了AbstractRedisToken,其value为String,其type为RedisTokenType.STATUS,其accept执行的是visitor.status(this)
ErrorRedisToken
resp-server-0.16.0/src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
public static final class ErrorRedisToken extends AbstractRedisToken<String> { ErrorRedisToken(String value) { super(RedisTokenType.ERROR, value); } @Override public <T> T accept(RedisTokenVisitor<T> visitor) { return visitor.error(this); } }
- ErrorRedisToken继承了AbstractRedisToken,其value为String,其type为RedisTokenType.ERROR,其accept执行的是visitor.error(this)
IntegerRedisToken
resp-server-0.16.0/src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
public static final class IntegerRedisToken extends AbstractRedisToken<Integer> { IntegerRedisToken(Integer value) { super(RedisTokenType.INTEGER, value); } @Override public <T> T accept(RedisTokenVisitor<T> visitor) { return visitor.integer(this); } }
- IntegerRedisToken继承了AbstractRedisToken,其value为Integer,其type为RedisTokenType.INTEGER,其accept执行的是visitor.integer(this)
ArrayRedisToken
resp-server-0.16.0/src/main/java/com/github/tonivade/resp/protocol/AbstractRedisToken.java
public static final class ArrayRedisToken extends AbstractRedisToken<Sequence<RedisToken>> { ArrayRedisToken(Sequence<RedisToken> value) { super(RedisTokenType.ARRAY, requireNonNull(value).asArray()); } @Override public <T> T accept(RedisTokenVisitor<T> visitor) { return visitor.array(this); } public int size() { return getValue().size(); } }
- ArrayRedisToken继承了AbstractRedisToken,其value为Sequence<RedisToken>,其type为RedisTokenType.ARRAY,其accept执行的是visitor.array(this)
小结
RedisToken接口定义了getType、accept办法;它还提供了nullString、responseOk、string、status、integer、error、array、visit静态方法;AbstractRedisToken申明实现RedisToken接口,它的结构器要求输出type、value,它有UnknownRedisToken、StringRedisToken、StatusRedisToken、ErrorRedisToken、IntegerRedisToken、ArrayRedisToken这些实现类
doc
- RedisToken