spring数据redis总是需要byte []中的输入,所以我尝试创建一个包装类,所以我不需要每次都将String转换为字节。
但是现在我遇到了evalSHA方法的问题,因为它接受了varargs。
evalSha(byte[] scriptSha, ReturnType returnType, int numKeys, byte[]... keysAndArgs)
如何将字符串中的varargs转换为byte []中的varargs?
以下是我目前的代码:
public List<String> evalSHA(String script, int numKeys, String ... keys){
List<String> result = null;
RedisConnection redis = redisConnectionFactory.getConnection();
byte[] scriptSHA = redis.get("SCRIPT:CALGROUPQUEUE".getBytes());
if(scriptSHA==null || scriptSHA.length==0){
logger.error("no such script");
return null;
}
List<byte[]> keysInByte = vargsToList(keys);
// what to do below?
List<byte[]> resultBytes = redis.evalSha (scriptSHA, ReturnType.MULTI, ???);
if(resultBytes!=null && !resultBytes.isEmpty()){
result = new ArrayList<>();
//... to do later
}
}
答案 0 :(得分:1)
varargs只不过是一个数组,这意味着在你的情况下,它是一个2D字节数组。所以你可以做到以下几点:
List<byte[]> resultBytes = redis.evalSha(scriptSHA, ReturnType.MULTI, keysInByte.toArray(new byte[][] {}));
这使用List的toArray方法将其转换为数组。为了简化这一点,您还可以使用vargsToArray()
辅助方法,直接返回一个数组。